PHP被忽视的一些语法(一)-创新互联

PHP中有一些几乎不会关注和关心的‘细枝末节’。

创新互联专注于企业全网整合营销推广、网站重做改版、祥云网站定制设计、自适应品牌网站建设、H5页面制作商城系统网站开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为祥云等各大城市提供网站开发制作服务。

如果你敢说你精通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》方法静态变量

function f1(){     static $a;     $a++;     var_dump($a); } function f2(){     static $a;     $a += 10;     var_dump($a); } f1();//1 f1();//2 f1();//3 f2();//10 f2();//20 f2();//30

方法里的静态变量属于方法,作用域也指向当前方法。

2》类静态属性

class A{     public static $name = 'zhangsan';     public function test(){ return self::$name;     } } var_dump((new A)->test());

3》类静态方法

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;

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:PHP被忽视的一些语法(一)-创新互联
网页路径:http://scyanting.com/article/ccdgch.html