欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php中self和this的区别与用法详细介绍

程序员文章站 2022-03-08 08:17:07
...

php中self和this的区别与用法详细介绍

PHP中this和self关键字的区别

1、self代表类,$this代表对象
2、能用$this的地方一定使用self,能用self的地方不一定能用$this
3、静态的方法中不能使用$this,静态方法给类访问的。

PHP中this和self关键字的用法:

self是引用静态类的类名,而$this是引用非静态类的实例名。

static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。

因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。

static的属性,在内存中只有一份,为所有的实例共用。

使用self:: 关键字访问当前类的静态成员。

一个类的所有实例,共用类中的静态属性。

也就是说,在内存中即使有多个实例,静态的属性也只有一份。

下面例子中的设置了一个计数器$count属性,设置private 和 static 修饰。

这样,外界并不能直接访问$count属性。而程序运行的结果我们也看到多个实例在使用同一个静态的$count 属性。

<?php    
class user  
{    
   private static $count = 0 ; //记录所有用户的登录情况.    
   public function __construct() {    
       self::$count = self::$count + 1;    
   }    
   public function getCount() {      
       return self::$count;    
   }    
   public function __destruct() {    
       self::$count = self::$count - 1;    
   }    
}    
$user1 = new user();    
$user2 = new user();    
$user3 = new user();    
echo "now here have " . $user1->getCount() . " user";    
echo "<br />";    
unset($user3);    
echo "now here have " . $user1->getCount() . " user";    
?>


静态属性直接调用

静态属性不需要实例化就可以直接使用,在类还没有创建时就可以直接使用。

使用的方式是: 类名::静态属性名

<?php    
class Math  
{    
   public static $pi = 3.14;    
}    
// 求一个半径3的园的面积。    
$r = 3;    
echo "半径是 $r 的面积是<br />";    
echo Math::$pi * $r * $r;    
echo "<br /><br />";    
//这里我觉得 3.14 不够精确,我把它设置的更精确。    
Math::$pi = 3.141592653589793;    
echo "半径是 $r 的面积是<br />";    
echo Math::$pi * $r * $r;      
?>


类没有创建,静态属性就可以直接使用。

静态方法

静态方法不需要所在类被实例化就可以直接使用。

使用的方式是 类名::静态方法名

相了解更多相关内容请访问PHP中文网:PHP视频教程

以上就是php中self和this的区别与用法详细介绍的详细内容,更多请关注其它相关文章!