138-PHP static后期静态绑定(一)】的更多相关文章

先说一下__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…
self 是个孝子 不管后来 谁是它的领导(调用它)  谁生了它  它就听谁的 子类调用父类的方法 self 的生存空间是父类 不管是不是子类调用 我生在哪 我就在哪个类里面找属性/方法 static  就是所谓的后期静态绑定 static 一切听命令  是谁调用的它  它就听谁的 子类调用的 我就找子类的属性/方法 我不管我(代码) 是不是写在父类里面…
PHP后期静态绑定的(late static bindings) 理解PHP延迟静态绑定 static::中的static其实是运行时所在类的别名,并不是定义类时所在的那个类名.这个东西可以实现在父类中能够调用子类的方法和属性. 使用(static)关键字来表示这个别名,和静态方法,静态类没有半毛钱的关系,static::不仅支持静态类,还支持对象(动态类). 转发调用: 所谓的"转发调用"(forwarding call)指的是通过以下几种方式进行的静态调用,self::,paren…
后期静态绑定PHP手册 使用的保留关键字: static 定义: static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的.也可以称之为"静态绑定",因为它可以用于(但不限于)静态方法的调用. self与static的区别: self调用的就是本身代码片段这个类,而static调用的是从堆内存中提取出来,访问的是当前实例化的那个类(即static作用于当前调用的类) 示例一(在静态环境下) <?php class A { public static functi…
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方…
this 绑定的是当前已经实例化的对象 这样长出现的问题: 如果你在一个父类中使用$this调用当前一个类的方法或者属性,如果这个类被继承,且在相应的子类中有调用的属性或者方法是,则父类中的$this调用的方法或者属性会使用子类中的方法. <?php class baseParent { static $counter = 0; function getName() { return 'baseParent'; } function printName() { echo $this->getN…
self.static 和 $this 的区别为了更好地理解 self.static 和 $this 的区别,先来看一个示例. <?phpclass A { protected $name = 'A'; static $alias = 'a'; const HASH = 'md5'; public function dd() { echo $this->name; echo '--'; echo static::$alias; echo '--'; // 后期静态绑定 echo static:…
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…
1.Abstract class(抽象类) 抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 抽象类不能被直接实例化.抽象类中只定义(或部分实现)子类需要的方法.子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化. 如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法.如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 前面加上 abs…
与类有关的魔术常量: __CLASS__,:获取其所在的类的类名. __METHOD__:获取其所在的方法的方法名. class A{ function f1(){ echo __CLASS__: //输出“A” echo __METHOD__: //输出“f1” //注意:get_class()也可以得到类名,但其必须有个“对象” } } 数据(变量)序列化/反序列化 什么叫序列化: 就是将一个变量的数据“转换为”字符串——但并不是类型转换. 其目的(意图)是将该字符串“存储起来”(比如存为文…
<?php class C { //三私一公 protected static $_instance = null; protected function __construct() //protected方便继承 ,privated无法继承 { throw new Exception("禁止实例化"); } protected function __clone() { throw new Exception("禁止克隆") } public function…
后期静态绑定 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 准确说,后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwarding call)的类名.当进行静态方法调用时,该类名即为明确指定的那个(通常在 :: 运算符左侧部分):当进行非静态方法调用时,即为该对象所属的类.所谓的“转发调用”(forwarding call)指的是通过以下几种方式进行的静态调用:self::,parent::,static:: 以及 f…
案例分析 先前的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…
参考: http://www.cnblogs.com/devcjq/articles/2424738.html http://www.cnblogs.com/alsf/p/9621002.html https://blog.csdn.net/xf552527/article/details/81325815 1.PHP之parent解析 parent是指向父类的指针,一般用于调用父类的构造函数来初始化子类,如parent::__construct() 2.PHP之$this解析 $this是指向…
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 5.3.0开始,PHP增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 该功能从语言内部角度考虑被命名为”后期静态绑定“.”后期绑定“的意思是说,static::不再被解析为定义当前方法所在的类,而是在实际运行时计算的.也可以称之为”静态绑定“,因为它可以用于(但不限于)静态方法的调用. self::的限制 编辑 使用self:: 或者 __CLASS__对当前类的静态引用,取决于定义当前方法所在的类: self::用法 编辑 php cl…
先说结论: self 和 __CLASS__,都是对当前类的静态引用,取决于定义当前方法所在的类.也就是说,self 写在哪个类里面, 它引用的就是谁.$this 指向的是实际调用时的对象,也就是说,实际运行过程中,谁调用了类的属性或方法,$this 指向的就是哪个对象.但 $this 不能访问类的静态属性和常量,且 $this 不能存在于静态方法中.static 关键字除了可以声明类的静态成员(属性和方法)外,还有一个非常重要的作用就是后期静态绑定.self 可以用于访问类的静态属性.静态方法…
        今天老大在公司 问了一下  new static  和 new self 的区别 公司十个程序 竟然没有一个回答上来 后面画面自补 ... 本屌丝回家后 就百度了解了下 这二者区别 : 使用 self:: 或者 __CLASS__ 对当前类的静态引用,取决于定义当前方法所在的类: 使用 static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的.也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用. 静态绑定是PHP 5.3.0,增加的一个功能 用于…
什么叫后期静态绑定呢?其实我们在之前的文章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…
php中static关键字使用: 情景1:静态变量 使用static关键字定义静态变量 静态变量:只存在于函数作用域内,也就是说,静态变量只存活在栈中.一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会.就是说,下次再调用这个函数的时候,该变量的值会保留下来. 示例代码: 1 <?php 2 function test_1(){ $num = 0; $num ++ ; 5 echo $num; } function test_2(){ static $num = 0; $num…
每次要用PHP的某个功能的时候,都要去查一下,于是决定将PHP所有类和函数都整理出来,加上注释 大致实现 将php.jar文件解压,取出目录stubs 将stubs中的所有php文件中的注释去掉,并做格式化处理,放在目录output 将所有文件中类和函数解析出来 从http://php.net/manual/zh/中将类和函数注释解析出来 格式化输出类和函数及所有注释 github地址:https://github.com/chentaihan/phpNote a 0 acos 反余弦 1 ac…
PHP高级程序设计 学习笔记 2014.06.10 Static(静态)关键字用来定义静态方法和属性,static 也可用于定义静态变量以及后期静态绑定. 1.静态变量 static variable 静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失.也就是说,在下一次执行这个函数时,变量仍然会记得原来的值.要将某个变量定义为静态的,只需要在变量前加上static关键字即可. function testing() { static $a = 1; $a *= 2; echo…
转载来自: http://www.infocool.net/kb/PHP/201607/168683.html a 函数 说明 abs 绝对值 acos 反余弦 acosh 反双曲余弦 addcslashes 以 C 语言风格使用反斜线转义字符串中的字符 addslashes 使用反斜线引用字符串 apache_child_terminate 在本次请求结束后终止 apache 子进程 apache_getenv 获取 Apache subprocess_env 变量 apache_get_mo…