php中双冒号的应用
在php中定义的作用域有self和parent两种(在php6中提供了static作用域)。
self:表示当前类的作用域,与this不同的是它不表示类的某个特定实例,在类之外的代码中不能使用self,而且它不能识别自己在继承中层次的位置。也就是说,当在扩展类中使用self时,它调用的不是父类的方法,而是扩展类的重载的方法。
parent:表示当前类父类的作用域,其余的跟self特性一样。
举例说明php双冒号::操作符:
<?php class forasp{ static $url="http://blog.csdn.net/abandonship"; static $webname = "PHP学习之双冒号的用法"; public function writeurl(){ echo self::$url;//调用自己的内容 } public function writewebname(){ echo "测试子类调用父类内容"; } } class cn extends forasp{ function father(){ parent::wirtewebname(); } } $a = new forasp();//实例化父类 $a->writeurl();//调用自身内容 $b = new cn(); $b->writewebname();//调用父类内容 ?>
在调用静态方法中也可以使用::来调用类中的静态方法或者属性,这样可以减少资源使用,因为每个类的实例都会占有一部分资源。
php6中提出static::作用域,是我们不再需要self::和parent::。希望指向最终的实现功能的类时,就用static::,这个限定符会在代码执行前立即计算出继承层中最后那个类的成员,这一过程叫做延迟绑定。
“双冒号操作符”也或称为“作用域限定操作符”(Scope Resolution Operator)可以访问静态、const和类中重写的属性与方法。
在类定义外使用的话,使用类名调用。在PHP 5.3.0,可以使用变量代替类名。
Program List:用变量在类定义外部访问
<?php class Fruit { const CONST_VALUE = 'Fruit Color'; } $classname = 'Fruit'; echo $classname::CONST_VALUE; // As of PHP 5.3.0 echo Fruit::CONST_VALUE; ?>
Program List:在类定义外部使用双冒号(::)
<?php class Fruit { const CONST_VALUE = 'Fruit Color'; } class Apple extends Fruit { public static $color = 'Red'; public static function doubleColon() { echo parent::CONST_VALUE . "\n"; echo self::$color . "\n"; } } Apple::doubleColon(); ?>
程序运行结果:
Fruit Color Red
Program List:调用parent方法
Php代码
<?php class Fruit { protected function showColor() { echo "Fruit::showColor()\n"; } } class Apple extends Fruit { // Override parent's definition public function showColor() { // But still call the parent function parent::showColor(); echo "Apple::showColor()\n"; } } $apple = new Apple(); $apple->showColor(); ?>
程序运行结果:
Fruit::showColor()
Apple::showColor()
Program List:使用作用域限定符
Php代码
<?php class Apple { public function showColor() { return $this->color; } } class Banana { public $color; public function __construct() { $this->color = "Banana is yellow"; } public function GetColor() { return Apple::showColor(); } } $banana = new Banana; echo $banana->GetColor(); ?>
程序运行结果:
Banana is yellow
Program List:调用基类的方法
Php代码
<?php class Fruit { static function color() { return "color"; } static function showColor() { echo "show " . self::color(); } } class Apple extends Fruit { static function color() { return "red"; } } Apple::showColor(); // output is "show color"! ?>
程序运行结果:
show color
上一篇: PHP页面间参数传递的四种方法详解
下一篇: Centos 下rpm方式安装MySQL
推荐阅读
-
求挽救匹配PHP字符串中的cookie
-
php中通过curl模拟登陆discuz论坛的实现代码_PHP教程
-
windows 2003 server php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
-
flash cookie PHP中的cookie
-
PHP的Yii框架中YiiBase入口类的扩展写法示例,yiiyiibase_PHP教程
-
php中的PHP_EOL换行符_PHP教程
-
剖析PHP中的输出缓冲 flush之类
-
几个php中类的自动加载的方法的实例详解
-
php中关于socket的系列函数总结_php实例
-
php中解析带中文字符的url函数分享,_PHP教程