首页 > 代码库 > PHP被忽视的一些语法(一)
PHP被忽视的一些语法(一)
PHP中有一些几乎不会关注和关心的‘细枝末节’。
如果你敢说你精通PHP,不了解这个系列就算不得什么精通。也就应该继续了解以下内容。
第一篇 new self() 和 new static()
1 . new self()
self的用法有
1》引用类常量
class A{ const DATELINE = ‘20170101‘; public function check_newyear(){ return (@date(‘Ymd‘) >= self::DATELINE); } } var_dump((new A)->check_newyear());//bool(true)
2》引用类静态方法
class A{ const DATELINE = ‘20170101‘; public function check_newyear(){ return self::is_newyear(); } public static function is_newyear(){ return (@date(‘Ymd‘) >= self::DATELINE); } } var_dump((new A)->check_newyear());//bool(true)
3》引用非静态方法(不推荐)
class A{ const DATELINE = ‘20170101‘; public function check_newyear(){ return self::is_newyear(); } public function is_newyear(){ return (@date(‘Ymd‘) >= self::DATELINE); } }
self 完全等同于self所在 类名
self 完全可以用当前类 类名 替代
class A{ const AGE = 1; public function test(){ return self::AGE; } } class B extends A{ const AGE = 2; } var_dump((new B)->test());//int(1) //-------------------------------- class A{ const AGE = 1; public function test(){ return self::AGE; } } class B extends A{ const AGE = 2; public function test(){ return self::AGE; } } var_dump((new B)->test());//int(2)
以上俩段代码可以验证这一点。
由此类推如下代码就简单了:
class A{ public function instance(){ return new self(); } } var_dump((new A)->instance()); //可替代为 class A{ public function instance(){ return new A(); } } var_dump((new A)->instance());
class A{ public function instance(){ return new self(); } } class B extends A{ public function instance(){ return new self(); } } var_dump((new B)->instance()); //可替代为 class A{ public function instance(){ return new A(); } } class B extends A{ public function instance(){ return new B(); } } var_dump((new B)->instance());
2. new static()
static的用法
1》类静态属性
class A{ public static $name = ‘zhangsan‘; public function test(){ return self::$name; } } var_dump((new A)->test());
2》类静态方法
class A{ public static $name = ‘zhangsan‘; public static function test(){ return self::$name; } } var_dump((new A)->test());
附错误例
//Error1 //$name 为非静态变量 class A{ public $name = ‘zhangsan‘; public static function test(){ return self::$name; } } //Error2 //静态方法内存在$this class A{ public $name = ‘zhangsan‘; public static function test(){ return $this->name; } }
而我们知道,静态属性属于类本身,所以静态对象也存在继承。
class A{ public static $name = ‘zhangsan‘; public function test(){ return self::$name; } } class B extends A{ public function test(){ return self::$name; } } var_dump((new B)->test());//zhangsan
在继承中static是动态的
class A{ public static $name = ‘zhangsan‘; public static function test(){ return self::$name; } public static function test1(){ return static::$name; } } class B extends A { public static $name = "lisi"; } var_dump(A::test1()); //zhangsan; var_dump(B::test1()); //lisi;
其实, static 是 self 的补充。
3 . new self() 和 new static() 的不同
class A{ public static $name = ‘zhangsan‘; public function test(){ return new self(); } public function test1(){ return new static(); } } class B extends A { } var_dump((new A)->test()); //A; var_dump((new A)->test1()); //A; var_dump((new B)->test()); //A; var_dump((new B)->test1()); //B;
PHP被忽视的一些语法(一)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。