写一个分级的命名空间, 并实现类的自动加载
新建一个文件Test1.php代码如下:
实例
<?php namespace _001\one; class Test1{ public static function demo(){ return __METHOD__; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
新建一个文件Test2.php代码如下:
实例
<?php namespace __001\one\two; class Test2{ public static function demo(){ return __METHOD__; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
新建一个文件index.php代码如下:
实例
<?php namespace _001; //类的自动加载 spl_autoload_register(function ($className){ $path = str_replace('\\', DIRECTORY_SEPARATOR, $className); $path = __DIR__ .'/'. $path . '.php'; if (file_exists($path)) include $path; }); // use // 默认从全局开始, 可以省略掉: \ // as 给当前的空间名称起一个别名 // 防止当前空间名称命名冲突 // 如果省略as ,那么当前类的别名就是当前类的去掉空间名称的类名 use __001\one\Test1 as T1; use __001\one\two\Test2 as T2; echo T1::class; echo '<br>'; echo T2::class; echo '<br>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行后效果如下图所示:
2. 写一个trait类, 理解它的功能与使用场景
实例
<?php namespace _001; trait Name{ public function getName($name){ return $name; } } trait Sex{ public function getSex($sex){ return $sex; } } class Person{ use Name; use Sex; public function __construct($name,$sex){ $this->name=$name; $this->sex=$sex; } public function getPerson(){ return '姓名:'.$this->getName($this->name).'<br>性别:'. $this->getSex($this->sex); } } $obj=new Person('张三','男'); echo $obj->getPerson();
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行后效果如下图所示:
注意:trait优先级大于父级,不可以实例化。
可以用来写一个方法集,而不改变父级的代码。