批改状态:合格
老师批语:
属性重载: __get(),__set()方法重载: __call(),__callStatic
class Col{protected $data = ['username' => 'HSFFLT',];// 属性重载: 拦截器public function __get($name){// 通常会创建一个获取器,动态的生成一个方法名称$method = 'get' . ucfirst($name);if (method_exists($this, $method)) {return $this->$method($name);}}// 获取器public function getUsername($name){if (!isset($this->data[$name])) {$this->data[$name] = 0;} else {return $this->data[$name];}}}// 实例化$obj = new Col;// 访问一个属性echo $obj->username;

class Col{protected $data = [];// 属性重载: 拦截器public function __get($array){// 通常会创建一个获取器,动态的生成一个方法名称$method = 'get' . ucfirst($array);return $this->$method($array);}public function getEmail($array){if (!isset($this->data[$array])) {$this->data[$array] = 0;} else {return $this->data[$array];}}// __set:当访问不存在可无权限设置的属性时自动调用public function __set($array, $value){$method = 'set' . ucfirst($array);return $this->$method($array, $value);// echo $method;}// 设置器public function setEmail($array, $value){$this->data[$array] = $value;}}// 实例化$obj = new Col;// 访问一个属性$obj->email = '123456';echo $obj->email;

class Demo{// 方法也可以重载public function __call($name, $arguments){// 这里只做一件事,请求转发return $name. '['.implode(',',$arguments).']';}// 当访问一个不存在的静态方法时,会定位到下面这个魔术方法中public static function __callStatic($name, $arguments){return $name. '['.implode(', ',$arguments).']';}}// 实例化$obj = new Demo;echo '__call: '. $obj->hello(1,2,3),'<hr>';echo'__callStatic: '. Demo::test('H','E','L','O','O');

<?php// 类class Kind{public $kind = __CLASS__;}echo (new Kind) ->kind .' 类','<br>';// 常量const PATH = 'Kindatas'.' 常量';echo PATH,'<br>';// 函数function set(){return __FUNCTION__;}echo set().' 函数','<hr>';

<?php// 命名空间: 解决全局成员的命名冲突namespace So {// 类class Mno{//...}// 常量const PATH = 'MnonM';// 函数function MnO(){// ...}echo Mno::class . ' 类', '<br>';echo PATH::class . ' 常量', '<br>';echo MnO::class . ' 函数', '<hr>';}// 全局空间namespace {// 类class Kind{//...}// 常量const PATH = 'Kintaba';// 函数function set(){// ...}echo Kind::class . ' 类', '<br>';echo PATH::class . ' 常量', '<br>';echo set::class . ' 函数', '<hr>';}

为了防止一个空间中的代码过大,可以考虑将同一个空间的代码写到多个脚本中将文件demo6.php分解到demo6-1.php,demo6-2.php,demo6-3.php这三个文件,再由这三个文件合并成一个
<?php// 同名空间成员的组织方式namespace NO;require 'demo6-1.php';require 'demo6-2.php';require 'demo6-3.php';// 类echo Demo1::class, '<br>';// 常量echo Demo2::class, '<br>';// 函数echo Demo3::class, '<hr>';
<?phpnamespace NO;// 类class Demo1{// 我有500行代码}
<?phpnamespace NO{// 常量//此处有800行代码}
<?phpnamespace NO{// 函数// 此处1200行代码}

<?php// 父空间// namespace: 用在空间中,表示当前空间的引用,类似于$this或selfnamespace nos1 {class Name{// ...}echo Name::class, '<br>';// 访问它的子空间成员echo nos2\Name::class, '<br>';echo nos2\nos3\Name::class, '<hr>';}// nos1的子空间namespace nos1\nos2 {class Name{// ...}echo Name::class, '<br>';echo nos3\Name::class, '<hr>';}// nos2的子空间namespace nos1\nos2\nos3 {class Name{// ...}echo Name::class, '<br>';// 在nos3中,访问上级空间怎么办?echo \nos1\nos2\Name::class, '<br>';echo \nos1\Name::class, '<br>';// 全局成员:前面加上全局空间的标识符: \echo \Name::class,'<hr>';}

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号