目錄
php中this,self,parent三个关键字的作用 " >php中this,self,parent三个关键字的作用 
$this" >$this
static" >static
final" >final
const" >const
self" >self
PHP双冒号::的用法" >PHP双冒号::的用法
首頁 後端開發 php教程 php面向对象类中的$this,static,final,const,self及双冒号 : 这几个关键字使用方法

php面向对象类中的$this,static,final,const,self及双冒号 : 这几个关键字使用方法

Jun 13, 2016 pm 12:12 PM
function gt quot static this

php面向对象类中的$this,static,final,const,self及双冒号 :: 这几个关键字使用方法。

php中this,self,parent三个关键字的作用 

this,self,parent三个关键字之间的区别,从字面上比较好理解,分别是指这、自己、父亲。我们先建立几个概念,这三个关键字分别是用在什么 地方呢?我们初步解释一下,this是指向当前对象的指针(姑且用C里面的指针来看吧),self是指向当前类的指针,parent是指向父类的指针。我 们这里频繁使用指针来描述,可能是因为没有更好的语言来表达。

<?php <span style="color:#ff0000;">// this是指向当前对象的指针class test_this{    private $content; //定义变量    function __construct($content){ //定义构造函数          $this->content= $content;    }    function __destruct(){}//定义析构函数    function printContent(){//定义打印函数        echo $this->content.'<br>';    }}$test=new test_this('北京欢迎你!'); //实例化对象$test->printContent();//北京欢迎你!$test=new test_this('新年新气象!');//再一次实例化对象$test->printContent();//新年新气象!echo '<br>';<span style="color:#ff0000;">//self是指向类的本身,只跟类有关,跟任何对象实例无关</span>class test_self{    private static $first_count; //定义静态变量    private $last_count;    function __construct(){        $this->last_count=++self::$first_count;//直接用self调用变量的值赋值给另一个变量    }    function __destruct(){}    function print_self(){        print($this->last_count);    }}$abc=new test_self();//实例化对象$abc->print_self();//1echo '<br>';<span style="color:#ff0000;">//parent是指向父类的指针</span>class test_parent{ //基类    public $name;  //定义姓名  父类成员需要定义为public,才能够在继承类中直接使用 this来调用。    function __construct($name){        $this->name=$name;    }}class test_son extends test_parent{ //派生类  继承test_parent    public $gender;//定义性别    public $age;    //定义年龄    function __construct($gender,$age){ //继承类的构造函数        parent::__construct('nostop');//使用parent调用父类的构造函数,来进行对父类的实例化        $this->gender=$gender;        $this->age=$age;    }    function __destruct(){}    function print_info(){        echo $this->name.'是个'.$this->gender.',今年'.$this->age.'岁'.'<br>';    }}$nostop=new test_son('女性','22');//实例化test_son对象$nostop->print_info();//执行输出函数  nostop是个女性,今年23岁?>
登入後複製

$this

$this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value='phpernote';的形式。常见用法如:
$this->属性
$this->方法
举例如下:
查看代码打印
<span style="font-size:14px;"><?phpclass MyClass{	private $name;	public  function __construct($name){		$this->name=$name;	}	public function getname(){		return $this->name;	}	public  function printName(){		echo $this->getname();	}}$myclass= new MyClass("I Like PHP");$myclass->printName();//输出:I Like PHP?></span>
登入後複製
在类里面调用当前类的属性和方法有三种方法,分别是self、parent、$this,这三个关键字的区别是:self用来指向当前的类;parent用于指向当前类的父类,可以使用该关键字调用父类的属性和方法;$this用来在类体内调用自身的属性和方法。

static

关键字可以是self(在类内部调用静态成员时所使用)静态成员所在的类名(在类外调用类内部的静态成员时所使用)
声明一个静态变量如下:
static $val='';
只存在于函数作用域的变量,函数执行之后变量的值不会丢失,只会初始化一次,初始化静态变量不能使用表达式,不用全局变量代替是因为全局变量会被所有函数访问容易造成维护不宜
类中使用static有两种主要用途、定义静态成员和定义静态方法。静态成员只保留一个变量的值,这个值对所有实例都是有效的,如下:
<?phpclass MyObject{	public static $myStaticVar=0;	function myMethod(){		self::$myStaticVar+=2;		echo self::$myStaticVar;	}}$instance1=new MyObject();$instance1->myMethod();$instance2=new MyObject();$instance2->myMethod();//结果将分别打印2、4
登入後複製
<?phpclass Book{	static $num=0;	public function showMe(){		echo"您是滴".self::$num."位访客";		self::$num++;	}}$book1=new Book();$book1->showMe();echo"<br>";$book2=new Book();$book2->showMe();echo"<br>";echo"您是滴".Book::$num."位访客";?>
登入後複製
结果将是:
您是滴0位访客
您是滴1位访客
您是滴2位访客
另外需要注意的是如果类的方法是static的,他所访问的属性也必须是static的。

final

最终的类和方法,不能继承,该关键字修饰的方法不能被重写。一般用法如下:
<?phpfinal class MyClass{//此类将不允许被继承	final function fun1(){......}//此方法将不允许被重写}
登入後複製

const

在类的内部方法访问已经声明为const及static的属性时,需要使用self::$name的形式调用。举例如下:
<?phpclass clss_a{	private static $name="static class_a"; 	const PI=3.14; 	public $value; 	public static function getName(){ 		return self::$name; 	} 	//这种写法有误,静态方法不能访问非静态属性 	public static function getName2(){ 		return self::$value; 	} 	public function getPI(){ 		return self::PI; 	}}
登入後複製
注意const属性的申明格式是const PI=3.14,而不是const $PI=3.14。

self

self表示类本身,指向当前的类。通常用来访问类的静态成员、方法和常量。

PHP中 :: 、-> 、self 、$this操作符的区别

在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::,反之如果被引用的变量或者方法没有被声明成const或者static,那么就必须使用操作符->。
另外,如果从类的内部访问const或者static变量或者方法,那么就必须使用自引用的self,反之如果从类的内部访问不为const或者static变量或者方法,那么就必须使用自引用的$this。

PHP双冒号::的用法

双冒号操作符即作用域限定操作符Scope Resolution Operator可以访问静态、const和类中重写的属性与方法
在类定义外使用的话,使用类名调用。在PHP 5.3.0,可以使用变量代替类名。Program List:用变量在类定义外部访问。

<?phpclass Fruit {    const CONST_VALUE = &#39;Fruit Color&#39;;}$classname = &#39;Fruit&#39;;echo $classname::CONST_VALUE; // As of PHP 5.3.0echo Fruit::CONST_VALUE;?>
登入後複製
Program List:在类定义外部使用::

<?phpclass Fruit {    const CONST_VALUE = &#39;Fruit Color&#39;;}class Apple extends Fruit{    public static $color = &#39;Red&#39;;    public static function doubleColon() {        echo parent::CONST_VALUE . "\n";        echo self::$color . "\n";    }}
登入後複製
程序运行结果:Fruit Color Red


Program List:调用parent方法

<?phpclass Fruit{    protected function showColor() {        echo "Fruit::showColor()\n";    }}class Apple extends Fruit{    // Override parent&#39;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 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:调用基类的方法

    <?phpclass 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




本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

華為GT3 Pro和GT4的差異是什麼? 華為GT3 Pro和GT4的差異是什麼? Dec 29, 2023 pm 02:27 PM

許多用戶在選擇智慧型手錶的時候都會選擇的華為的品牌,其中華為GT3pro和GT4都是非常熱門的選擇,不少用戶都很好奇華為GT3pro和GT4有什麼區別,下面就給大家介紹一下二者。華為GT3pro和GT4有什麼差別一、外觀GT4:46mm和41mm,材質是玻璃鏡板+不鏽鋼機身+高分纖維後殼。 GT3pro:46.6mm和42.9mm,材質是藍寶石玻璃鏡+鈦金屬機身/陶瓷機身+陶瓷後殼二、健康GT4:採用最新的華為Truseen5.5+演算法,結果會更加的精準。 GT3pro:多了ECG心電圖和血管及安

function是什麼意思 function是什麼意思 Aug 04, 2023 am 10:33 AM

function是函數的意思,是一段具有特定功能的可重複使用的程式碼區塊,是程式的基本組成單元之一,可以接受輸入參數,執行特定的操作,並傳回結果,其目的是封裝一段可重複使用的程式碼,提高程式碼的可重複使用性和可維護性。

修復:截圖工具在 Windows 11 中不起作用 修復:截圖工具在 Windows 11 中不起作用 Aug 24, 2023 am 09:48 AM

為什麼截圖工具在Windows11上不起作用了解問題的根本原因有助於找到正確的解決方案。以下是截圖工具可能無法正常工作的主要原因:對焦助手已開啟:這可以防止截圖工具開啟。應用程式損壞:如果截圖工具在啟動時崩潰,則可能已損壞。過時的圖形驅動程式:不相容的驅動程式可能會幹擾截圖工具。來自其他應用程式的干擾:其他正在運行的應用程式可能與截圖工具衝突。憑證已過期:升級過程中的錯誤可能會導致此issu簡單的解決方案這些適合大多數用戶,不需要任何特殊的技術知識。 1.更新視窗與Microsoft應用程式商店應用程

如何修復無法連線到iPhone上的App Store錯誤 如何修復無法連線到iPhone上的App Store錯誤 Jul 29, 2023 am 08:22 AM

第1部分:初始故障排除步驟檢查蘋果的系統狀態:在深入研究複雜的解決方案之前,讓我們先從基礎知識開始。問題可能不在於您的設備;蘋果的伺服器可能會關閉。造訪Apple的系統狀態頁面,查看AppStore是否正常運作。如果有問題,您所能做的就是等待Apple修復它。檢查您的網路連接:確保您擁有穩定的網路連接,因為「無法連接到AppStore」問題有時可歸因於連接不良。嘗試在Wi-Fi和行動數據之間切換或重置網路設定(「常規」>「重置」>「重置網路設定」>設定)。更新您的iOS版本:

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

'enumerate()'函數在Python中的用途是什麼? 'enumerate()'函數在Python中的用途是什麼? Sep 01, 2023 am 11:29 AM

在本文中,我們將了解enumerate()函數以及Python中「enumerate()」函數的用途。什麼是enumerate()函數? Python的enumerate()函數接受資料集合作為參數並傳回一個枚舉物件。枚舉物件以鍵值對的形式傳回。 key是每個item對應的索引,value是items。語法enumerate(iterable,start)參數iterable-傳入的資料集合可以作為枚舉物件傳回,稱為iterablestart-顧名思義,枚舉物件的起始索引由start定義。如果我們忽

MySQL.proc表的作用與功能詳解 MySQL.proc表的作用與功能詳解 Mar 16, 2024 am 09:03 AM

MySQL.proc表的功能與功能詳解MySQL是一種流行的關係型資料庫管理系統,開發者在使用MySQL時常常會涉及到預存程序(StoredProcedure)的建立與管理。而MySQL.proc表則是一個非常重要的系統表,它儲存了資料庫中所有的預存程序的相關信息,包括預存程序的名稱、定義、參數等。在本文中,我們將詳細解釋MySQL.proc表的作用與功能

c語言static的作用和用法是什麼 c語言static的作用和用法是什麼 Jan 31, 2024 pm 01:59 PM

c語言static的作用與用法:1、變數作用域;2、生命週期;3、函數內部;4、修飾全域變數;5、修飾函數;6、其他用途;詳細介紹:1、變數作用域,當一個變數前有static關鍵字,那麼這個變數的作用域被限制在聲明它的檔案內,也就是說,這個變數是“檔案層級作用域”,這對於防止變數的“重複定義”問題很有用; 2、生命週期,靜態變數在程式開始執行時初始化一次,並在程式結束時銷毀等等。

See all articles