批改状态:未批改
老师批语:
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 受保护:仅限本类或本类的子类访问,外部不可访问与代用
有了类才可以实例化对象,实例化对象后才可以进行调用类(包含继承类),访问类,成员属性!对象中没有类,也只是个无用的代码!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号