当左侧部分是对象实例时,可以使用->..否则,您将使用::.

这意味着->主要用于访问实例成员(尽管它也可用于访问静态成员,但不鼓励这种使用),而::通常用于访问静态成员(尽管在一些特殊情况下,它用于访问实例成员)。

总体而言,::用于范围分辨率,它可能有一个类名,parent, self,或(在PHP 5.3中)static在左边。parent指所使用的类的超类的作用域;self指使用它的类的作用域;static指“被调用的范围”(请参见后期静态绑定).

规则是::是实例调用当且仅当:目标方法未声明为静态方法。

调用时有一个兼容的对象上下文,这意味着这些内容必须为真:调用是从以下上下文发出的

$this存在和

.的阶级

$this是正在调用的方法的类或它的子类。

例子:class A {

public function func_instance() {

echo "in ", __METHOD__, "\n";

}

public function callDynamic() {

echo "in ", __METHOD__, "\n";

B::dyn();

}}class B extends A {

public static $prop_static = 'B::$prop_static value';

public $prop_instance = 'B::$prop_instance value';

public function func_instance() {

echo "in ", __METHOD__, "\n";

/* this is one exception where :: is required to access an

* instance member.

* The super implementation of func_instance is being

* accessed here */

parent::func_instance();

A::func_instance(); //same as the statement above

}

public static function func_static() {

echo "in ", __METHOD__, "\n";

}

public function __call($name, $arguments) {

echo "in dynamic $name (__call)", "\n";

}

public static function __callStatic($name, $arguments) {

echo "in dynamic $name (__callStatic)", "\n";

}}echo 'B::$prop_static: ', B::$prop_static, "\n";echo 'B::func_static(): ', B::func_static(), "\n";$a = new A;$b = new B;echo '$b->prop_instance: ', $b->prop_instance, "\n";//not recommended (static method called as instance method):echo '$b->func_static(): ', $b->func_static(), "\n";echo '$b->func_instance():', "\n", $b->func_instance(), "\n";/* This is more tricky

* in the first case, a static call is made because $this is an

* instance of A, so B::dyn() is a method of an incompatible class

*/echo '$a->dyn():', "\n", $a->callDynamic(), "\n";/* in this case, an instance call is made because $this is an

* instance of B (despite the fact we are in a method of A), so

* B::dyn() is a method of a compatible class (namely, it's the

* same class as the object's)

*/echo '$b->dyn():', "\n", $b->callDynamic(), "\n";

产出:B::$prop_static: B::$prop_static value

B::func_static(): in B::func_static

$b->prop_instance: B::$prop_instance value

$b->func_static(): in B::func_static

$b->func_instance():

in B::func_instance

in A::func_instance

in A::func_instance

$a->dyn():

in A::callDynamic

in dynamic dyn (__callStatic)

$b->dyn():

in A::callDynamic

in dynamic dyn (__call)

php中冒号是什么,在PHP中:(双冒号)和-(箭头)有什么区别?相关推荐

  1. Linux中三种引号(单引号、双引号、反引号)的区别

    1. 双引号 保护特殊元字符和通配符不被shell解析,但是允许变量和命令的解析,以及转义符的解析. 2. 单引号 单引号内不允许任何变量.元字符.通配符.转义符被shell解析,均被原样输出. 使用 ...

  2. html语言中的双冒号,css单冒号和双冒号用法和区别

    最近突然被别人问起css单冒号和双冒号有什么区别,答曰:"不知道". 虽然还在填坑中,但作为一个跨过了初级的FEer,感觉着实汗颜,刚好今天下午在搜别的问题的时候,突然看到一个对比 ...

  3. java中的双冒号操作符

    java :: Java中的双冒号操作符 </h1><div class="clear"></div><div class="p ...

  4. 双冒号(::)和单冒号(:)在 C++ 中的含义和作用

    目录 一.双冒号(::)在C++中的含义和作用 二.单冒号(:)在C++中的含义和作用 双冒号(::)和单冒号(:)在 C++ 中都是特殊符号,它们具有不同的含义和作用. 一.双冒号(::)在C++中 ...

  5. html语言中的双冒号,::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用...

    标题:::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用? 相关知识点: 单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素.(伪元素由双冒号和伪 ...

  6. ::before 和 :after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用?

    ::before 和 :after中双冒号和单冒号的区别以及2个伪元素的作用 ::before 和 :after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用 实例 实例 ::before 和 ...

  7. C++中的双冒号(::)

    双冒号(::)的用法(来自https://blog.csdn.net/qq_22424571/article/details/82962367) A::member就表示类A中的成员member. B ...

  8. JDK1.8 中的双冒号::是什么语法?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:Java实用技术 www.toutiao.com/i ...

  9. java中冒号是什么意思_css样式表有哪些?css双冒号是什么意思

    SS即层叠样式表(英语:Cascading Style Sheets,又称串样式列表.级联样式表.串接样式表.阶层式样式表)是一种用来为结构化文档(如HTML文档或XML应用)添加样式(字体.间距和颜 ...

  10. Python中双冒号的作用[::]

    Python中双冒号的作用[::] Python sequence slice addresses can be written as a[start:end:step] and any of sta ...

最新文章

  1. C# 中奇妙的函数–6. 五个序列聚合运算(Sum, Average, Min, Max,Aggregate)
  2. apache强制https访问
  3. 秋冬季节吃什么水果好
  4. word中链接到目标后返回快捷键
  5. Api文档生成工具与Api文档的传播(pdf)
  6. magento图片处理 Customize Magento’s Image Resize Functionality
  7. react转跳_您跳过的这些React基础知识可能会杀死您
  8. 程序设计与算法----递归之n皇后问题
  9. 初解vue脚手架vue-cli,及demo示例(一)
  10. Unsafe code may only appear if compiling with /unsafe
  11. CH552-HID 键盘 鼠标
  12. 小米 note3 android,小米NOTE3 MIUI9.6稳定版 开启全面屏手势和屏蔽经典物理按键全攻略...
  13. 利用Hbuilder + Android Studio 制作安卓APP
  14. Android之绘制动态折线图
  15. Android适配--dimen
  16. E.03.25 Chinese Video Company Bilibili Eyes $2.8 Billion Hong Kong Share Sale
  17. Excel中如何合并多个工作簿或者合并多个表格(利用方方格子)
  18. 海信电视power android,海信智能电视投屏之安卓手机miracast投屏教程
  19. 你的麦克风可能需要设置 未修复,问题已解决
  20. Google Earth Engine(GEE)——MOD10A1 V6 Snow Cover Daily Global 500m积雪、积雪反照率、部分积雪和质量评估 (QA) 数据

热门文章

  1. hdu2955 Robberies (动态规划之背包)
  2. 应届生,你如何应付技术关?
  3. 支付宝支付-手机浏览器H5支付
  4. php 页面加载进度条,HTML5/CSS3 网页加载进度条的实现,下载进度条等经典案例
  5. Validator 使用总结
  6. Android使用webview控件加载本地html,通过Js与后台Java实现数据的传递
  7. 1056. Mice and Rice (25)
  8. 【OS学习笔记】三十七 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----主引导扇区代码
  9. 【OS学习笔记】十 实模式:实现一个程序加载器-程序加载器如何将用户程序加载到内存并执行
  10. 用示例说明BitMap索引的效率要优于B-Tree索引