Jadual Kandungan
php中this,self,parent三个关键字的作用 
$this
static
final
const
self
PHP中 :: 、-> 、self 、$this操作符的区别
PHP双冒号::的用法
Rumah pembangunan bahagian belakang tutorial php php面向对象类中的$this,static,final,const,self这几个关键字使用方法。

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

Jun 23, 2016 pm 01:43 PM

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岁?>
Salin selepas log masuk

$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>
Salin selepas log masuk
在类里面调用当前类的属性和方法有三种方法,分别是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
Salin selepas log masuk
<?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."位访客";?>
Salin selepas log masuk
结果将是:
您是滴0位访客
您是滴1位访客
您是滴2位访客
另外需要注意的是如果类的方法是static的,他所访问的属性也必须是static的。

final

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

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; 	}}
Salin selepas log masuk
注意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 = 'Fruit Color';}$classname = 'Fruit';echo $classname::CONST_VALUE; // As of PHP 5.3.0echo Fruit::CONST_VALUE;?>
Salin selepas log masuk
Program List:在类定义外部使用::

<?phpclass 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";    }}
Salin selepas log masuk
程序运行结果:Fruit Color Red


Program List:调用parent方法

<?phpclass 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();?>
Salin selepas log masuk
程序运行结果:
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();?>
Salin selepas log masuk
程序运行结果: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"!?>
Salin selepas log masuk
程序运行结果:show color




Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perbezaan antara final, finally, dan finalize di Jawa Perbezaan antara final, finally, dan finalize di Jawa Feb 19, 2024 pm 12:16 PM

Perbezaan antara muktamad, akhirnya, dan memuktamadkan dalam Java memerlukan contoh kod khusus Dalam pengaturcaraan Java, anda sering menemui tiga kata kunci muktamad, akhirnya, dan memuktamadkan Walaupun ia dieja sama, ia mempunyai makna dan penggunaan yang berbeza. Artikel ini akan menerangkan perbezaan antara ketiga-tiga kata kunci ini secara terperinci dan memberikan contoh kod untuk membantu pembaca memahami dengan lebih baik. 1. Kata kunci akhir Kata kunci akhir boleh digunakan untuk kelas, kaedah dan pembolehubah. Fungsinya adalah untuk membuat kelas yang diubah suai

Di Jawa, adakah mungkin untuk menentukan pemalar hanya menggunakan kata kunci akhir? Di Jawa, adakah mungkin untuk menentukan pemalar hanya menggunakan kata kunci akhir? Sep 20, 2023 pm 04:17 PM

Pembolehubah malar ialah pembolehubah yang nilainya tetap dan hanya satu salinan wujud dalam atur cara. Sebaik sahaja anda mengisytiharkan pembolehubah malar dan memberikan nilai kepadanya, anda tidak boleh menukar nilainya semula sepanjang program. Tidak seperti bahasa lain, Java tidak menyokong pemalar secara langsung. Walau bagaimanapun, anda masih boleh mencipta pemalar dengan mengisytiharkan pembolehubah statik dan muktamad. Statik - Sebaik sahaja anda mengisytiharkan pembolehubah statik, ia akan dimuatkan ke dalam memori pada masa penyusunan, iaitu hanya satu salinan akan tersedia. Akhir - Sebaik sahaja anda mengisytiharkan pembolehubah akhir, nilainya tidak boleh diubah suai. Oleh itu, anda boleh mencipta pemalar dalam Java dengan mengisytiharkan pembolehubah contoh sebagai statik dan muktamad. Contoh Demonstrasi classData{&am

Apakah fungsi kata kunci akhir java Apakah fungsi kata kunci akhir java Nov 25, 2022 pm 04:26 PM

Di Java, final boleh digunakan untuk mengubah suai kelas, kaedah dan pembolehubah. Kelas diubah suai akhir bermakna kelas itu tidak boleh diwarisi oleh mana-mana kelas lain, yang bermaksud bahawa kelas ini ialah kelas daun dalam pokok warisan, dan reka bentuk kelas ini telah dianggap sempurna dan tidak perlu diubah suai atau dilanjutkan. Kaedah dalam kelas diubah suai akhir bermakna kelas itu tidak boleh diwarisi oleh mana-mana kelas lain dan tidak boleh ditindih iaitu kaedah dikunci untuk menghalang kelas yang diwarisi daripada mengubahnya. final mengubah suai pembolehubah dalam kelas, menunjukkan bahawa pembolehubah tidak boleh diubah setelah ia dimulakan.

Pemahaman mendalam tentang const dalam bahasa C Pemahaman mendalam tentang const dalam bahasa C Feb 18, 2024 pm 12:56 PM

Penerangan terperinci dan contoh kod const dalam C Dalam bahasa C, kata kunci const digunakan untuk menentukan pemalar, yang bermaksud bahawa nilai pembolehubah tidak boleh diubah suai semasa pelaksanaan program. Kata kunci const boleh digunakan untuk mengubah suai pembolehubah, parameter fungsi dan nilai pulangan fungsi. Artikel ini akan memberikan analisis terperinci tentang penggunaan kata kunci const dalam bahasa C dan memberikan contoh kod khusus. pembolehubah diubah suai const Apabila const digunakan untuk mengubah suai pembolehubah, ini bermakna pembolehubah itu ialah pembolehubah baca sahaja dan tidak boleh diubah suai setelah ia diberikan nilai. Contohnya: berterusan

Mari kita bincangkan tentang perbezaan antara var, let dan const (contoh kod) Mari kita bincangkan tentang perbezaan antara var, let dan const (contoh kod) Jan 06, 2023 pm 04:25 PM

Artikel ini membawakan anda pengetahuan yang berkaitan tentang JavaScript Ia terutamanya memperkenalkan kepada anda perbezaan antara var, let dan const, serta hubungan antara ECMAScript dan JavaScript. Rakan yang berminat boleh melihatnya.

Cara menggunakan const dalam bahasa c Cara menggunakan const dalam bahasa c Sep 20, 2023 pm 01:34 PM

const ialah kata kunci yang boleh digunakan untuk mengisytiharkan pemalar, pengubah const dalam parameter fungsi, nilai pulangan fungsi yang diubah suai const dan penunjuk yang diubah suai const. Pengenalan terperinci: 1. Isytiharkan pemalar Kata kunci const boleh digunakan untuk mengisytiharkan pemalar Nilai pemalar tidak boleh diubah suai semasa menjalankan atur cara, seperti integer, nombor titik terapung. aksara, dsb., atau jenis data tersuai; 2. Pengubah suai const dalam parameter fungsi Kata kunci const boleh digunakan dalam parameter fungsi, menunjukkan bahawa parameter tidak boleh diubah suai di dalam fungsi, dsb.

18 Cara untuk Memperbaiki Isu Perkhidmatan Audio Tidak Menjawab pada Windows 11 18 Cara untuk Memperbaiki Isu Perkhidmatan Audio Tidak Menjawab pada Windows 11 Jun 05, 2023 pm 10:23 PM

Output dan input audio memerlukan pemacu dan perkhidmatan tertentu untuk berfungsi seperti yang diharapkan pada Windows 11. Ini kadangkala berakhir dengan ralat di latar belakang, menyebabkan masalah audio seperti tiada output audio, peranti audio hilang, audio herot, dsb. Cara Membetulkan Perkhidmatan Audio Tidak Menjawab pada Windows 11 Kami mengesyorkan anda untuk memulakan dengan pembetulan yang dinyatakan di bawah dan menyelesaikan senarai sehingga anda berjaya menyelesaikan isu anda. Perkhidmatan audio mungkin menjadi tidak responsif atas beberapa sebab pada Windows 11. Senarai ini akan membantu anda mengesahkan dan menyelesaikan kebanyakan isu yang menghalang perkhidmatan audio daripada bertindak balas pada Windows 11. Sila ikut bahagian yang berkaitan di bawah untuk membantu anda melalui proses tersebut. Kaedah 1: Mulakan semula perkhidmatan audio yang mungkin anda hadapi

Apakah penggunaan kata kunci const yang betul dalam fungsi C++? Apakah penggunaan kata kunci const yang betul dalam fungsi C++? Apr 11, 2024 pm 02:36 PM

Penggunaan kata kunci const yang betul dalam C++: Menggunakan const untuk mengubah suai fungsi bermakna fungsi itu tidak akan mengubah suai parameter atau ahli kelas yang diluluskan. Menggunakan const untuk mengisytiharkan penunjuk fungsi bermakna penunjuk menunjuk kepada fungsi malar.

See all articles