批改状态:合格
老师批语:
匿名对象与匿名类
<?php
/**
* 匿名对象与匿名类
*/
//父类
class Dates
{
public function day()
{
return date("Y-m-d");
}
}
echo (new class() extends Dates{
})->day();点击 "运行实例" 按钮查看在线实例

Trait
<?php
/**
* Trait类可以实现多继承
* trait不能有同名属性
*/
trait A
{
protected $num1=60;
public function ad(){
return $this->num1;
}
}
class B
{
// 导入trait类
use A;
protected $num=100;
public function cd($num){
return $this->num=$this->num*$num;
}
}
$ts=new B();
echo $ts->ad()*$ts->cd(2);点击 "运行实例" 按钮查看在线实例

类的自动加载
<?php
/**
* demo1
*/
class Demo1
{
protected $str='php';
public function show(){
return $this->str;
}
}点击 "运行实例" 按钮查看在线实例
<?php
/**
* demo2
*/
class Demo2
{
protected $str = '放弃';
public function show(){
return $this->str;
}
}点击 "运行实例" 按钮查看在线实例
<?php
/**
* 类的自己加载函数
*/
spl_autoload_register(function ($className){
require './class/'.$className.'.php';
});
echo (new Demo1())->show().'从入门到'.(new Demo2())->show();

序列化与反序列化
<?php
/**
*对象的序列化与反序列化
* serialize() 序列化
* unserialize() 反序列化
* 对象序列化的特点:
* 1. 只保存对象中的属性,不保存方法
* 2. 只保存类名,不保存对象名
*/
class Db
{
public $db;
public $host;
public $user;
public $pwd;
// 连接数据库
public function __construct($host='127.0.0.1',$user='root',$pwd='')
{
$this->host=$host;
$this->user=$user;
$this->pwd=$pwd;
$this->connect();
}
private function connect()
{
$this->db=@mysqli_connect($this->host,$this->user,$this->pwd);
}
// 对象序列化时调用
public function __sleep()
{
return ['host','user','pwd'];
}
// 反序列化
public function __wakeup()
{
$this->connect();
}
}
$sql = new Db();
//序列化
echo serialize($sql),'<hr>';
$tmp=serialize($sql);
//反序列化
var_dump(unserialize($tmp));点击 "运行实例" 按钮查看在线实例

面向对象是用类将属性和方法进行封装实现代码的复用,使用时可以省掉一些复杂的算法直接获得结果;继承一个类后可以重载父类方法或扩充其他功能,使用面向对象编程便于维护
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号