【PHP趣味】new self和new static的区别
2016-04-15 15:48
696 查看
<?php class Test { private $_user; protected function __construct($user) { $this->_user = $user; } public function showUser() { echo "{$this->_user}\n"; } public static function of($user) { return new static($user); } } class MyTest extends Test { protected function __construct($user) { parent::__construct('from MyTest: '.$user); } } class Test2 { private $_user; protected function __construct($user) { $this->_user = $user; } public function showUser() { echo "{$this->_user}\n"; } public static function of($user) { return new self($user); } } class MyTest2 extends Test2 { protected function __construct($user) { parent::__construct('from MyTest: '.$user); } } MyTest::of("hello world")->showUser(); MyTest2::of("hello world")->showUser();
输出结果:
from MyTest: hello world
hello world
小结:
一般情况下new self就是实例化这行代码所在的类,但如果是子类调用父类的方法(如上面父类的of),在这个父类方法里实例化子类,就可以new static来实现(换句话说new static实现了在父类里实例化子类),这也是多态的体现,让程序更加灵活。(在YII框架中有应用)
相关文章推荐
- laravel-v4.0.9
- 类与对象
- PHPMailer使用
- 【php学习】数组操作
- 【转载】PHP运行模式的深入理解
- php反射例子
- PHPthinking在线编程工具终极版
- Yaf学习笔记1--Windows环境下安装Yaf
- php设计模式之单例模式实例(设计mysqli连接数据的数据处理类)
- laravel 一点操作
- 3. PHP常量
- php错误以及常用笔记
- 2. PHP变量
- windows下elasticSearch以及elasticSearch-php安装及使用
- php CI框架 使用PDO 的连接配置
- Github上的PHP资源汇总
- yii根据id查询一条数据
- H264编码 封装成MP4格式 视频流 RTP封包
- yii2查询数据倒序显示
- 1. PHP基本语法形式