类与对象
类class 属性有public protected private,const定义类常量extends继承,__construct构造,__destruct,代码利用trait,
abstruct,抽象类,interface接口,implements接口实现
类可用foreach遍历属性
<?php class a{ public $pu = "abc";//公共的 属性关键字由public,protected,private声名,后面跟普通变量,初始化必须是常数 protected $pro = "pro";//受保护的 private $pri="pri";//私有的 const constant = "constant value";//定义类常量 function printHello(){ echo $this->pu; echo $this->pro; echo $this->pri; var_dump($this); } function showcontant(){ echo self::constant." ";//用this } function __construct(){//构造函数,类创建时调用做初始化工作 print '<br>In BaseClass constructor'; } function __destruct() {//析构函数 print "Destroying " . $this->name . " "; } } class b extends a{ function __construct(){//继承的construct parent::__construct(); print '继承的construct'; } } class c extends a{};//如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)
echo a::constant;//范围解析操作符可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。 $cl=new a();//新建类要new $cl->showcontant(); $cl=new b(); $cl=new c(); echo '<br>访问控制<br>'; $obj = new a(); echo '<br>'; echo $obj->pu;//只用公共可以在外部调用 //echo $obj->pro;//保护 //echo $obj->pri;//私有 $obj->printHello(); ?>
<?php//自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。 class a{ public function sayHello(){ echo 'hello'; } } trait Sayword{ public function sayHello(){ parent::sayHello(); echo 'word!'; } } class SayHW extends a{ use Sayword; } $o=new SayHW(); $o->sayHello(); trait SayH{ public function say(){ echo 'hello word'; } } class at{ use SayH; public function say(){ echo 'hello trait'; } } $oo=new at(); $oo->say(); ?>
<?php abstract class Person{//任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的 abstract protected function Man($name);//定义抽象类abstract protected且不能实例化 } class PPerson extends person{ function Man($name,$sex='.'){ // 我们的子类可以定义父类签名中不存在的可选参数 if ($name == "Pacman") { $prefix = "Mr"; } elseif ($name == "Pacwoman") { $prefix = "Mrs"; } else { $prefix = ""; } return "{$prefix}{$sex} {$name}"; } public $var1='var1'; public $var2='var2'; protected $pro='pro';//受保护只能内部访问 private $pri='pri';//私有同上 function Foreac(){ echo "MyClass::iterateVisible: "; foreach($this as $key=>$value){ print "$key->$value "; } } } $class = new PPerson; echo $class->Man('Pacman'); echo $class->Man('Pacwoman','is'); echo '<br>遍历'; foreach($class as $key=>$value){//foreach键 值用=> print "$key->$value "; } $class->Foreac(); var_dump($class); ?>
<?php interface a{//接口声名interface public function Pr(); } interface b{ public function Pr2(); } interface c extends a,b{//继承extends public function baz(); } class foo implements c{ public function Pr(){ echo 'Pr'; } public function Pr2(){ echo 'Pr2'; } public function baz(){ echo 'bax'; } } $class=new foo; var_dump($class); $class->baz(); ?>