PHP学习笔记(二)之基础:PHP面向对象三大特征:封装 继承 多态
首先我们要分清楚面向对象和面向过程的的区别
众所周知:c语言是我们程序员起步必须学的语言之一,它是纯面向过程的。
然后:Java编程界的万金油 ˙ω˙ ,接触过的大家都知道它用途很广泛,然而是纯面向对象的.
一.封装
步骤:
1、类属性必须定义为公有(public),受保护(protected),(private)私有之一。如果用 var 定义,则被视为公有。
2、设置方法/调用方法(方法也可以定义属性,在function前面定义)
3、在方法中增加限制
<?php
/**
* Define MyClass
*/
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// 可以对 public 和 protected 进行重定义,但 private 而不能
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj2->public; // 这行能被正常执行
echo $obj2->private; // 未定义 private
echo $obj2->protected; // 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2 和 Undefined
?>
二.继承
子类继承父类的所有内容,但父类中的private部分不能直接访问
子类中新增加的属性和方法是对父类的扩展
子类中定义的与父类同名的属性是对父类属性的覆盖,同名的方法也是对父类方法的覆盖
<?php
class shao
{
public function sasa($name){
echo $name,'狗!
';
}
}
class zhen extends shao{
public function aaa()
{
echo '猫
';
}
}
$lli = new zhen();
$lli->aaa();
$lli->aaa('binghh');
?>