PHP 对象访问和关键字

PHP 对象访问和关键字this 和 self parent 这三个关键词分别代表什么 在哪些场合下使用

大家好,欢迎来到IT知识分享网。

$this和self、parent这三个关键词分别代表什么?在哪些场合下使用?

$this 当前对象 self 当前类 parent 当前类的父类

$this 在类中使用当前对象的属性和方法, 使用->调用属性和方法;

self 在当前类中使用, 不过需要使用::调用, 用来访问常量、静态成员、静态方法;

parent 在类中使用, 用来访问父类中的成员属性、父类中的方法、父类中的常量等;

常量: 使用const关键字声明

类内部访问 self::常量名;

类外部访问 类名::类常量

:: 范围解析符

final关键字的应用:

使用final标识的类, 不能被继承

在类中使用final标识的成员方法, 在子类中不能被覆盖

final: 最终的, 不可更改的

self:(在类内部访问)

用于访问类常量 访问静态成员 访问静态方法

parent:调用父类中成员属性 父类中的方法 父类中常量 父类中的构造方法;

parent主要用于访问被子类覆盖的方法, 如果混用则可读性差!

parent::父类中静态变量 parent::父类中静态方法 是可行的;高洛峰、传智播客均证实

静态变量和静态方法:使用static关键字声明

类内部访问: 可以使用self或static关键字访问(PHP5.4才支持static关键字访问)

self::静态变量(成员)

self::静态方法

static::静态变量(成员)

static::静态方法

self和static的区别

self 永远代表当前的类, 不会因为方法的调用者(子类和父类)而变换

static 关键字就是谁调用就代表谁(实例化的类)

类外部访问:

静态变量访问 类名::静态变量(成员)

静态方法访问 类名::静态方法(也可以用对象名去访问)

注意:静态方法中只能访问静态成员; $this在静态方法中不能使用;

$this和self的区别

1、$this代表进入当前类的对象, self代表当前类;

2、$this可以被直接打印, self不能被打印(是类的一种结构, 不能打印);

3、$this不能访问类常量、静态变量、静态方法, 访问类常量、静态变量、静态方法均采用self关键字,

<?php class MyClass { //声明一个MyClass类,用来演示如何使用静态成员 static $count; //在类中声明一个静态成员属性count,用来统计对象被创建的次数 function __construct() { //每次创建一个对象就会自动调用一次这个构造方法 self::$count++; //使用self访问静态成员count,使其自增1 } static function getCount() { //声明一个静态方法,在类外面直接使用类名就可以调用 return self::$count; //在方法中使用self访问静态成员并返回 } } MyClass::$count=0; //在类外面使用类名访问类中的静态成员,为其初使化赋值0 $myc1=new MyClass(); //通过MyClass类创建第一个对象,在构造方法中将count累加1 $myc2=new MyClass(); //通过MyClass类创建第二个对象,在构造方法中又为count累加1 $myc3=new MyClass(); //通过MyClass类创建第三个对象,在构造方法中再次为count累加1 echo MyClass::getCount(); //在类外面使用类名访问类中的静态成员方法,获取静态属性的值 3 echo $myc3->getCount(); //通过对象也可以访问类中的静态成员方法,获取静态属性的值 3 echo $myc2->getCount(); //值为3 echo $myc1->getCount(); //值为3 ?>
<?php class Father{ //静态属性 public static $name = 'father'; protected static $money = 1000; private static $age = 30; //父类方法 public static function getFather(){ echo self::$name,'<br/>'; //father echo self::$money,'<br/>'; //1000 echo self::$age,'<br/>'; //56 //self::永远代表自己类: Father // Son调用该方法: static代表Son echo static::$name,'<br/>'; //laowang echo static::$money,'<br/>'; //10 //echo static::$age,'<br/>'; //错误: 私有属性不能在类外访问 } } //定义子类 class Son extends Father{ //静态属性 public static $name = 'laowang'; protected static $money = 10; private static $age = 20; } //继承证明 //echo Son::$name; //有继承语法在 结果 son //方法访问 //Father::getFather(); Son::getFather(); //总结:self关键字从一开始永远代表自己所在的类, 不会因为方法的调用者(子类和父类)而变换; //static关键字就是谁调用就代表谁

静态方法实现递归函数的调用

private function changeArrKey($array,$case=0){ if(!is_array($array)) return $array; $tempArray=array(); $do=($case === 0)?"strtolower":"strtoupper"; foreach ($array as $key=>$value){ $key=$do($key); if(is_array($value)){ $value=self::changeArrKey($value); }else{ $value=$do($value); } $tempArray[$key]=$value; } return $tempArray; } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/96321.html

(0)
上一篇 2026-03-13 07:21
下一篇 2026-03-13 11:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信