分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

PHP static关键字和self关键字的区别

发布时间:2023-09-06 01:43责任编辑:顾先生关键词:PHP

在PHP的一个类中,带有static关键字的方法和属性被称为静态方法和静态属性,这样的方法和属性可以通过类直接访问,而不需要通过类对应的实例来进行访问,在类中访问静态变量以及静态属性的时候,可以使用self关键字和static关键字,两种访问方式看起来似乎没有区别,但是实际上还是不一样的

abstract class Person{ ???public static $_className = ‘Person‘; ???public static function getIntro() ???{ ???????return ‘this is a Person‘; ???} ???public function say() ???{ ???????return self::getIntro(); ???} ???public function staticSay() ???{ ???????return static::getIntro(); ???} ???public function getClassName() ???{ ???????return self::$_className; ???} ???public function staticGetClassName() ???{ ???????return static::$_className; ???}}class Driver extends Person{ ???public static $_className = ‘Driver‘; ???public static function getIntro() ???{ ???????return ‘this is a Driver‘; ???}}$temp = new Driver;echo $temp->getClassName().‘<br>‘;echo $temp->say().‘<br>‘;//staticecho $temp->staticGetClassName().‘<br>‘;echo $temp->staticSay().‘<br>‘;

运行之后的结果为:

Person
this is a Person
Driver
this is a Driver

由此可看出,在类中使用self关键字访问的静态方法以及静态变量时,self被解析为定义方法和变量的类,在使用static关键字访问的时候,static指的是被调用的类

在抽象类中加入方法print打印一个类的实例:

abstract class Person{ ???public static $_className = ‘Person‘; ???public static function getIntro() ???{ ???????return ‘this is a Person‘; ???} ???public function say() ???{ ???????return self::getIntro(); ???} ???public function staticSay() ???{ ???????return static::getIntro(); ???} ???public function getClassName() ???{ ???????return self::$_className; ???} ???public function staticGetClassName() ???{ ???????return static::$_className; ???}//print方法用于打印一个类的实例 ???public function print() ???{ ???????print_r(new self()); ???}}$temp = new Driver;$temp->print();

运行后会报“Cannot instantiate abstract class Person”错误,原因是此时$temp->print()方法中new self()指的是定义的Person这个类,而抽象类是无法实例化的,此时将方法改为:

public function print(){ ???print_r(new static());}

即可成功运行,输出Driver Object ( ),说明此时打印出来的实例为Driver类的实例

PHP static关键字和self关键字的区别

原文地址:https://www.cnblogs.com/jackiebao/p/8459899.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved