(1)php中的类
描述:php中类的定义都以关键字 class 开头,后跟类名,再后面跟着一对花括号。
括号内包含有类的属性与方法的定义。
语法:class 类名 { 类内部的结构 }
说明:
a.类名可以是任何非 PHP 保留字的合法标签。一个合法类名以字母或下划线开头,
后面跟着若干字母,数字或下划线。
b.一个类可以包含有属于自己的常量,变量【属性】以及函数【即方法】。
例子:
class Peo{
public $peoName = ‘people name’; //public是一个关键词,稍后再说
function showSelf(){
echo 'hello world!';
}
}
(2)php中的对象
描述:要创建一个类的实例,必须使用 new 关键字。类应在被实例化之前定义。
语法:$对象名 = new 类名();
说明:
a.对于创建对象的语句中,new后面的类名后有没有小括号都可以。
b.对象与对象之间的传值仍然是赋值传递,只不过传递的内容是一个内存地址。
例子:
class Peo{
public $peoName = ‘people name’;
function showSelf(){
echo 'hello world!';
}
}
$frank = new Peo;//Peo Object ( [peoName] => people name )
print_r($frank);
(3)php中类的属性与属性类型关键词
描述:类内部的变量成员称为属性,或字段、特征。
语法:由关键字public,protected或者private开头,然后跟一个普通的变量声明来组成。
class 类名{
属性关键词 $变量名(属性名) = 属性值;
属性关键词 function 方法名 (参数1,参数2,…){ 方法内容代码; }
}
说明:
a.属性中的变量可以初始化,但初始化的值必须是常数。
b.类的属性和方法如果没有写明类型关键词,则都默认是公有
public:被定义为公有的类成员可以在任何地方被访问。
protect:被定义为受保护的类成员则可以被其自身以及其子类和父
类访问。
private:被定义为私有的类成员则只能被其定义所在的类访问。
c.在类的成员方法中,可以用->来访问非静态属性,其中->称为对象
运算符
例子:
class Peo{
public $peoName = ‘people name’; //声明公有属性
private function showSelf(){ //声明私有方法
echo 'hello world!';
}
public function canUsedFunc(){ //声明公有方法
$this->showSelf(); //$this是一个伪对象,表示
} // 当前正在调用这个方法的对象
}
$frank = new Peo(); //实例化一个Peo类的对象
echo $frank->peoName; //通过->访问对象的公有属性
$frank->peoName = ‘Frank’; //修改对象的公有属性
echo $frank->peoName;
$frank->canUsedFunc(); //调用对象的公有方法,间接执行私有方法
(5)php中类的构造函数
描述:构造函数是类在实例化对象的时候自动执行,用来帮助类去构造对象的函数。
php为所有的类都提供了一个和类名相同的隐藏构造函数。
可以通过显示编写或通过__construct函数来主动进行编辑。
语法:
class 类名{
//function __construct(){ 主动修改的代码 }
function 类名(){ 主动修改的代码 }
}
说明:两种写法都能够实现构造函数的主动编辑,但是需要知道系统自动提供的是第二中结构
例子:
class Peo{
public $peoName;
function __construct(){$this->peoName = '默认值';}
}
$frank = new Peo();
echo $frank->peoName;
(6)php中类的继承
描述:继承有时也被称为类扩展。是指子类会继承父类所有公有的和受保护的属性方法。
在php中使用extends关键词来实现继承。
语法:
function SonClassName extends FatherClassName{
子类结构
}
说明:
a.除非子类覆盖了父类的方法,否则被继承的方法都会保留其原有功能。
b.继承对于功能的设计和抽象是非常有用,避免了重复编写大量相同的公有结构
c.对于公有属性和方法的继承,子类可以直接随意使用
对于受保护的属性和方法的继承,可以在【父类或子类内部】使用
对于私有的属性和方法,子类不能够继承。
例子:
zclass Father{
public $pubPro = '父类公开的属性';
protected $protecPro = '父类受保护的属性';
private $priPro = '父类私有的属性';
public function fatherPublicPut(){
echo $this->pubPro."<br/>";
echo $this->protecPro."<br/>";
echo $this->priPro."<br/>";}
protected function fatherProtectPut(){
echo $this->pubPro."<br/>";
echo $this->protecPro."<br/>";
echo $this->priPro."<br/>";}
private function fatherPrivatePut(){
echo $this->pubPro."<br/>";
echo $this->protecPro."<br/>";
echo $this->priPro."<br/>";
}
}
class Son extends Father{
public function SonSelfPut(){
echo $this->pubPro."<br/>";
echo $this->protecPro."<br/>";
echo $this->priPro."<br/>";
}
}
$father = new Father();
echo $father->pubPro; //父类公开的属性
echo $father->protecPro; //报错,受保护属性外部无法直接访问
echo $father->priPro; //报错,私有属性外部无法访问
$father->fatherPublicPut(); //父类公开的属性、父类受保护属性、父类私有属性
$father->fatherProtectPut(); //报错,受保护方法外部无法直接访问
$father->fatherPrivatePut(); //报错,私有方法外部无法直接访问
$son = new Son();
echo $son->pubPro; //父类公开的属性(继承来的)
echo $son->protecPro; //报错,受保护属性外部无法直接访问
echo $son->priPro; //报错,私有属性外部无法访问
$son->fatherPublicPut(); //父类公开的属性、父类受保护属性、父类私有属性(继承来的)
$son->fatherProtectPut(): //报错,受保护方法外部无法直接访问
$son->fatherPrivatePut(); //报错,私有方法外部无法直接访问
$son->SonSelfPut(); 父类公开的属性、父类受保护的属性、报错
(证明继承的属性只有public和protected的属性)