批改状态:合格
老师批语:
重载 :系统在特定的时机自动调用的方法
__get 触发时机:对象在外部访问私有成员或者受保护属性时调用
该方法有一个参数:参数就是属性名
<?phpclass Get{public $name;private $age;protected $hight;function __construct($name,$age,$hight){$this -> name = $name;$this -> age = $age;$this -> hight = $hight;}public function __get($shuxing){if ($shuxing == 'age') {return $this -> age;}}}$boj = new Get('小明',18,170);echo $boj -> age;
__set 触发时机:对象在外部设置私有成员或者受保护成员属性值时后调用
需要两个参数,属性名和属性值
<?phpclass Set{public $name = '小明';private $age = 18;protected $hight = 175;public function __get($shuxing){if ($shuxing == 'age') {$this -> age;}}public function __set($name,$val){var_dump($name, $val);if ($name == 'age') {$this -> age = $val;}}}$boj = new Set();$boj -> age = 23;echo $boj -> age;
__tostring 触发时机:echo 一个对象的时候触发,该函数需要return一个字符串
<?phpclass SString{public $name = '小明';public function __toString(){return '我叫'.$this->name;}}$boj = new SString();echo $boj;
__unset 触发时机:当外部销毁私有属性或者受保护的属性时候触发,
需要传入一个属性名
<?phpclass Uset{public $name = '小明';private $age = 18;protected $hight = 175;public function __unset($name){if ($name == 'age') {unset($this->age);}}}$boj = new Uset();unset($boj->age);var_dump($boj);
__destruct 触发时机:当对象被销毁时候自动调用
<?phpclass xigou{public $name = '小明';function Name(){echo '我叫'.$this->name.'<br>';}public function __destruct(){echo '我被释放了';}}$boj = new xigou();echo $boj -> Name();
<?php//serialize 序列化// __sleep 触发时机:在序列化一个对象时候调用,返回值必须是一个数组,数组中写想要序列化成员属性名// __wakeup 触发时机:在反序列化一个对象时候调用//unserialize 反序列化class Get{public $name;public $age;public $hight;function __construct($name,$age,$hight){$this -> name = $name;$this -> age = $age;$this -> hight = $hight;}public function __sleep(){return ['name','age'];}public function __wakeup(){$this -> hight = 180;}}$boj = new Get('小明',18,170);$str = serialize($boj);file_put_contents('boj.text',$str);$str2 = file_get_contents('boj.text');$obj = unserialize($str2);var_dump($obj);
<?php// __call 触发时机:当调用一个不存在对象方法时候触发// 需要传入两个参数,第一个是函数名,第二个是一个数组// __callstatic 触发时机:当调用一个不存在静态方法时候触发class Call{public $name = '小明';public function __toString(){return '我叫'.$this->name;}public function __call($name, $value){var_dump($name, $value);}public static function __callstatic($name, $value){var_dump($name, $value);}}$boj = new Call();$boj -> boy(1,2,3);$boj::dome(1,2,3);
<?php//php全局成员:类,常量,函数//全局成员特点:一旦定义不能复用//类class Dome{public $domes = __CLASS__;}$obj = new Dome();echo $obj->domes.'类'.'<br>';//常量const NAME = 'admin';echo NAME.'<br>';//函数function dome(){return __FUNCTION__;}echo dome();
<?php// 空间的声明与空间成员的访问//命名空间 关键字 namespacenamespace ns{class Dome{public $domes = __CLASS__;}$obj = new Dome();echo Dome::class.'<br>';//常量const NAME = 'admin';echo NAME::class.'<br>';//函数function dome(){return __FUNCTION__;}echo dome::class.'<br>';}
合并
dome3.php
<?php//相同命名空间成员的组织方式namespace ns;require 'dome3-1.php';require 'dome3-2.php';require 'dome3-3.php';// 类echo Demo1::class.'<br>';// 常量echo Demo2::class.'<br>';// 函数echo Demo3::class;
成员分解
dome3-1.php
<?phpnamespace ns;// 类class Demo1{}
dome3-2.php
namespace ns{class Demo2{// 我有500行代码}}
dome3-3.php
<?phpnamespace ns{class Demo3{}}
<?phpnamespace ns{class dome{}echo dome::class,'<br>';echo ns2\dome::class,'<br>';echo ns2\ns3\dome::class,'<hr>';}//ns子空间namespace ns\ns2{class dome{}echo ns3\dome::class,'<hr>';}//ns2子空间namespace ns\ns2\ns3{class dome{}//访问上级echo \ns\ns2\dome::class,'<br>';echo \dome::class;}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号