先说一下__CLASS__,get_class() , get_called_class() 区别: __CLASS__获取当前的类名, get_class()与上面一样,都是获取当前的类名, get_called_class()获取当前主调类的类名.参考程序: class A { public function say() { echo 'a is called by'.__CLASS__.'<br/>'; echo 'a is called by'.get_class().'<br…
<?php class test{ //创建test类 public function __construct(){ static::getinfo(); //后期静态绑定 } public static function getinfo(){ echo '实例化一个test类的对象<br />'; } } class test1 extends test{ //创建继承自test类的test1类 public static function getinfo(){ echo '实例化一个…
<?php class test{ //创建test类 public function __construct(){ self::getinfo(); //后期静态绑定 } public static function getinfo(){ echo '实例化一个test类的对象<br />'; } } class test1 extends test{ //创建继承自test类的test1类 public static function getinfo(){ echo '实例化一个te…
php后期静态绑定 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 虽然也可以调用非静态方法,但是不会在运行时绑定. static 不再只是简单的静态修饰关键字.而是可以像下面这样调用类的静态方法,非静态方法,为什么静态非静态要分开说呢,因为调用的效果是不一样的. <?php class A { public static function who () { echo __CLASS__ ; } public static fun…
在我们以往中,在类中使用self关键字的时候都是指向了被调用方法定义时的类,而非原始的调用类. 例如: class Animal{ static $IQ_lv_avg = 1; public static function myiqlvavg(){ echo self::$IQ_lv_avg.PHP_EOL; } public static function test(){ self::myiqlvavg(); } } class Dog extends Animal{ static $IQ_l…
如果你是一个懒惰的程序员,你看到以下代码可能会恼火 abstract class U{ } class u1 extends U{ public static function create(){ return new u1(); } } class u2 extends U{ public static function create(){ return new u2(); } } 这段代码正常工作是没问题,但大量重复的代码会很烦人 我不想在每个子类中添加create方法,如果把create方…
1:static访问符 在类中使用static有两种主要用途.定义静态成员和定义静态方法.静态成员只保留一个变量的值,这个值对所有实例都是有效的 类的方法是static的,他所访问的属性也必须是static的 2:static后期静态绑定 什么是静态绑定? abstract class U { } class u1 extends U { public static function create() { return new u1(); } } class u2 extends U { pub…
<?php class C { //三私一公 protected static $_instance = null; protected function __construct() //protected方便继承 ,privated无法继承 { throw new Exception("禁止实例化"); } protected function __clone() { throw new Exception("禁止克隆") } public function…
案例分析 先前的PHP项目中,看到类似于以下的一段代码: <?php class DBHandler { public function get() { } } class MySQLHandler extends DBHandler { // 这里一个create public static function create() { echo "MySQL"; return new self(); } public function get() { echo "MySQ…
this,static和self. self和this还是很好区分的,可是self和static就很糊涂了,两者都能调用静态的方法和属性,看似使用上没有什么太大的分别,但是实际上分别很大,先来看下面这一段代码: class Boo { protected static $str = "This is class Boo"; public static function get_info(){ echo get_called_class()."<br>";…
这段时间看项目后台的PHP代码,看到了类似于以下的一段代码,我把它抽出来: <?php class DBHandler { function get() {} } class MySQLHandler extends DBHandler { // 这里一个create public static function create() { echo "MySQL"; return new self(); } public function get() { echo "MyS…
简单通俗的来说, self就是写在哪个类里面, 实际调用的就是这个类.所谓的后期静态绑定, static代表使用的这个类, 就是你在父类里写的static, 然后通过子类直接/间接用到了这个static, 这个static指的就是这个子类, 所以说static和$this很像, 但是static可以用于静态方法和属性等. 举个简单的例子, class ATest { public function say() { echo 'Segmentfault'; } public function ca…
自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 虽然也可以调用非静态方法,但是不会在运行时绑定. static 不再只是简单的静态修饰关键字.而是可以像下面这样调用类的静态方法,非静态方法,为什么静态非静态要分开说呢,因为调用的效果是不一样的. <?php class A { public static function who () { echo __CLASS__ ; } public static function test ()…
什么叫后期静态绑定呢?其实我们在之前的文章PHP中的static中已经说过这个东西了.今天我们还是再次深入的理解一下这个概念. 首先,我们通过一段代码来引入后期静态绑定这一概念: class A { public static function who() { echo __CLASS__, PHP_EOL; } public static function test() { self::who(); } } class B extends A { public static function…