1、匿名对象与匿名类的实现过程:
实例
<?php class a{ private $name ='甜歌'; public function stror($name){ return $this->name.'看上了:<span style="color:red;">'.$name.'</span>'; } } $a = new a(); echo $a->stror('帅哥').'<hr>'; // 匿名对象 echo (new a())->stror('好哥们').'<hr>'; //匿名类 echo (new class{ private $name = '坏孩子'; public function stror($name){ return $this->name.'喜欢上了:<span style="color:red;">'.$name.'</span>'; } })->stror('帅哥'),'<hr>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
2、Trait类的声明与工作原理:
实例
<?php class a{ // 受保护的成员变量 protected $name; public function __construct($name='小白'){ $this->name=$name; } public function study($course = 'php'){ return $this->name . '学习:' . $course; } } trait Cour{ public $title = '小名'; public function study($name = '踢足球'){ return $this->name .'在学习'.$name; } } trait Cour1{ public function study($name = '打篮球'){ return $this->name .'和'.$this->title.$name; } } class Student extends a{ use Cour,Cour1{ // 当Cour类中的方法与Cour1类中的方法同名就替换成 Cour1的类方法, Cour::study insteadof Cour1; // 给 Cour1类中的方法起个别名 Cour1::study as MySport; } } // Student对象实例化 $Student = new Student(); // 调用的是 $Student类中的trait Cour类study方法 echo $Student->study().'<hr>'; // 调用的是 $Student类中的trait Cour1类study方法,但是与方法同名了,所以起了调用的是MySport别名 echo $Student->MySport().'<hr>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
3、类的自动加载函数的写法:
实例
<?php spl_autoload_register(function ($className){ // 自动加载class文件夹中的后缀.php文件 require 'class/'.$className.'.php'; });
运行实例 »
点击 "运行实例" 按钮查看在线实例
4、对象的序列化与反序列化的原理与应用:
实例
<?php class demo{ public $name; public $age; public $salary; // 构造方法 public function __construct($name,$age,$salary=0){ $this->name=$name; $this->age=$age; $this->salary=$salary; } // 当有序列化的属性时,自动调用 public function __sleep(){ return ['name','age','salary']; // 要序列化的属性 } // 如果反序列化时,wakeup方法中有相同的属性时,就以wakeup方法中的值为最新值 public function __wakeup(){ $this->age = 48; $this->name = '天歌凤舞'; } } $obj = new demo('天弘',28,5000); // 序列化之前对象属性 echo '姓名:'.$obj -> name.',年龄:'.$obj->age.',工资:'.$obj->salary.'<br>'; // 序列化之后对象属性 $obj1 = serialize($obj); echo $obj1.'<hr>'; // 反序列化 $obj2 = unserialize($obj1); // 反序列化之后的对象属性 echo '姓名:'.$obj -> name.',年龄:'.$obj->age.',工资:'.$obj->salary.'<br>'; // 反序列化之后 var_dump($obj2); echo '<hr>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
5、面向对象编程的基本理解
访问一个类,必须要实例化对象。这样才可以访问对象中的类。当有很多类方法相同的情况下,为了代码复用性,我们可以把对象实例化来进行调用与访问。以及继承其他的类进行访问调用,这样代码就更加简洁一些。
可以把对象中的类,看作为一个方法类,当我们需要哪些代码时,进行对象的实例化进行调用他的方法类。
在对象中有三个重要的访问控制符:private 私有化:属性仅在当前对象内部可以使用,外部类不可以调用。public公开的:可以在外部类进行调用与使用。protected 受保护:仅限本类或本类的子类访问,外部不可访问与代用
有了类才可以实例化对象,实例化对象后才可以进行调用类(包含继承类),访问类,成员属性!对象中没有类,也只是个无用的代码!