批改状态:合格
老师批语:
- 描述类成员重载的原理与实现,并实例演示;
- 全局成员有哪几种,有什么特点,并实例演示;
- 实例演示空间的声明与空间成员的访问;
- 实例演示空间成员的分解与合并操作;
- 实例演示子空间,并在子空间中访问任何空间中的成员的方式;
class Demo{// 私有属性private $data = [];// 公开方法public function data(){return $this->data;}// 设置类中不存在的属性时调用public function __set($name, $value){$this->data[$name] = $value;}// 访问类中不存在的属性时调用public function __get($name){if (isset($this->data[$name]))return $this->data[$name];return 'Property ' . $name . ' not exist.';}// 访问类中不存在的方法时调用public function __call($name, $arguments){if (method_exists($this, $name))return call_user_func_array([$this, $name], $arguments);return 'Method ' . $name . ' not exist.';}// 访问类中不存在的静态方法时调用public static function __callStatic($name, $arguments){return 'Static Method: ' . $name . ', args: ' . implode(',', $arguments);}// 对象当字符串使用时调用public function __toString(){return 'Magic Method: ' . __FUNCTION__;}// 对象当函数使用时调用public function __invoke(){return 'Magic Method: ' . __FUNCTION__;}// 对象序列化时调用public function __sleep(){return ['Magic Method', __FUNCTION__];}// 对象反序列化时调用public function __wakeup(){echo 'Magic Method: ' . __FUNCTION__;}}$obj = new Demo();// 设置类中不存在的属性$obj->hello = 'hello world!';// hello world!echo $obj->hello, '<br>';// 访问类中不存在的属性// Property world not exist.echo $obj->world, '<br>';// 访问类中存在的方法// Array ( [hello] => hello world! )echo print_r($obj->data(), true), '<br>';// 访问类中不存在的方法// Method func not exist.echo $obj->func(), '<br>';// 访问类中不存在的静态方法// Static Method: func, args: hello,world!echo Demo::func('hello', 'world!'), '<br>';// 对象当字符串使用时// Magic Method: __toStringecho $obj, '<br>';// 对象当函数使用时// Magic Method: __invokeecho $obj(), '<br>';// 对象序列化时$serObj = serialize($obj);// O:4:"Demo":2:{s:12:"Magic Method";N;s:7:"__sleep";N;}echo $serObj, '<br>';// 对象反序列化时// Magic Method: __wakeupunserialize($serObj);echo '<hr>';

// 类class App{public $app = __CLASS__;}// 常量const APP = 'Helo App';// 函数function app(){return __FUNCTION__;}// 类// Appecho (new App)->app, '<br>';// 常量// Helo Appecho APP, '<br>';// 函数// appecho app(), '<br>';

// 全局空间namespace {// 类class App{public $app = 'App';}// 常量const APP = 'Helo App';// 函数function app(){return 'app';}// 类// Appecho App::class, '<br>';// 常量// APPecho APP::class, '<br>';// 函数// appecho app::class, '<hr>';}// 命名空间namespace Ns {// 类class App{public $app = 'App';}// 常量const APP = 'Helo App';// 函数function app(){return 'app';}// 类// Ns\Appecho App::class, '<br>';// 常量// Ns\APPecho APP::class, '<br>';// 函数// Ns\appecho app::class, '<hr>';}

将上面命名空间 Ns 分解到 0222-3.php 合并 0222-3-1.php, 0222-3-2.php, 0222-3-3.php
新建 0222-3.php
// 命名空间namespace Ns;require '0222-3-1.php';require '0222-3-2.php';require '0222-3-3.php';// 类// Ns\Appecho App::class, '<br>';// 常量// Ns\APPecho APP::class, '<br>';// 函数// Ns\appecho app::class, '<hr>';
// 命名空间namespace Ns {// 类class App{public $app = 'App';}}
// 命名空间namespace Ns {// 常量const APP = 'Helo App';}
// 命名空间namespace Ns {// 函数function app(){return 'app';}}

子空间访问其它空间使用绝对路径
新建 0222-4.php
// 全局空间namespace {const HELLO = 'hello world!';}// 命名空间namespace Ns {// 类class App{public $app = 'App';}// 全局空间// hello world!echo \HELLO, '<hr>';}// 子空间namespace Ns\Ns1 {// 常量const APP = 'Helo App';// 当前空间 - 常量// Ns\Ns1\APPecho APP::class, '<br>';// 父空间 - 类// Ns\Appecho \Ns\App::class, '<br>';// 全局空间// hello world!echo \HELLO, '<hr>';}// 子子空间namespace Ns\Ns1\Ns2 {// 函数function app(){return 'app';}// 父空间 - 类// Ns\Appecho \Ns\App::class, '<br>';// 子空间 - 常量// Ns\Ns1\APPecho \Ns\Ns1\APP::class, '<br>';// 当前空间 - 函数// Ns\Ns1\Ns2\appecho app::class, '<br>';// 全局空间// hello world!echo \HELLO, '<hr>';}

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