목차
php中this,self,parent三个关键字的作用 
$this
static
final
const
self
PHP中 :: 、-> 、self 、$this操作符的区别
PHP双冒号::的用法
백엔드 개발 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岁?>
로그인 후 복사

$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 = 'Fruit Color';}$classname = 'Fruit';echo $classname::CONST_VALUE; // As of PHP 5.3.0echo Fruit::CONST_VALUE;?>
로그인 후 복사
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";    }}
로그인 후 복사
程序运行结果: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();?>
로그인 후 복사
程序运行结果:
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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java에서 final, finally 및 finalize의 차이점 Java에서 final, finally 및 finalize의 차이점 Feb 19, 2024 pm 12:16 PM

Java에서 final, finally 및 finalize의 차이점에는 특정 코드 예제가 필요합니다. Java 프로그래밍에서는 final, finally 및 finalize라는 세 가지 키워드가 철자가 비슷하더라도 의미와 사용법이 다른 경우가 많습니다. 이 기사에서는 이 세 가지 키워드의 차이점을 자세히 설명하고 독자의 이해를 돕기 위해 코드 예제를 제공합니다. 1. Final 키워드 final 키워드는 클래스, 메소드, 변수에 사용할 수 있습니다. 그 기능은 수정된 클래스를 만드는 것입니다.

Java에서는 final 키워드만 사용하여 상수를 정의할 수 있나요? Java에서는 final 키워드만 사용하여 상수를 정의할 수 있나요? Sep 20, 2023 pm 04:17 PM

상수 변수는 값이 고정되어 있고 프로그램에 단 하나의 복사본만 존재하는 변수입니다. 상수 변수를 선언하고 값을 할당하면 프로그램 전체에서 해당 값을 다시 변경할 수 없습니다. 다른 언어와 달리 Java는 상수를 직접 지원하지 않습니다. 그러나 변수를 static 및 final로 선언하여 상수를 생성할 수 있습니다. 정적 - 정적 변수를 선언하면 컴파일 타임에 메모리에 로드됩니다. 즉, 하나의 복사본만 사용할 수 있습니다. 최종 - 최종 변수를 선언한 후에는 해당 값을 수정할 수 없습니다. 따라서 인스턴스 변수를 static 및 final로 선언하여 Java에서 상수를 생성할 수 있습니다. 예시 데모 classData{&am

Java final 키워드의 기능은 무엇입니까 Java final 키워드의 기능은 무엇입니까 Nov 25, 2022 pm 04:26 PM

Java에서는 final을 사용하여 클래스, 메소드 및 변수를 수정할 수 있습니다. 최종 수정된 클래스는 해당 클래스가 다른 클래스에 의해 상속될 수 없다는 의미입니다. 즉, 이 클래스는 상속 트리의 리프 클래스이며, 이 클래스의 설계가 완벽하다고 간주되어 수정이나 확장이 필요하지 않다는 의미입니다. 최종 수정된 클래스의 메서드는 해당 클래스가 다른 클래스에서 상속될 수 없고 재정의될 수 없음을 의미합니다. 즉, 상속된 클래스가 메서드를 변경하지 못하도록 메서드가 잠겨 있습니다. final은 클래스의 변수를 수정하여 변수가 초기화되면 변경할 수 없음을 나타냅니다.

C 언어의 const에 대한 깊은 이해 C 언어의 const에 대한 깊은 이해 Feb 18, 2024 pm 12:56 PM

C에서 const에 대한 자세한 설명 및 코드 예 C 언어에서는 const 키워드를 사용하여 상수를 정의하는데, 이는 프로그램 실행 중에 변수의 값을 수정할 수 없음을 의미합니다. const 키워드를 사용하여 변수, 함수 매개변수 및 함수 반환 값을 수정할 수 있습니다. 이 기사에서는 C 언어에서 const 키워드 사용에 대한 자세한 분석을 제공하고 구체적인 코드 예제를 제공합니다. const 수정된 변수 const를 사용하여 변수를 수정하는 경우 이는 해당 변수가 읽기 전용 변수이고 값이 할당되면 수정할 수 없음을 의미합니다. 예: 상수

var, let 및 const의 차이점에 대해 이야기해 보겠습니다(코드 예). var, let 및 const의 차이점에 대해 이야기해 보겠습니다(코드 예). Jan 06, 2023 pm 04:25 PM

이 글은 여러분에게 JavaScript에 대한 관련 지식을 제공합니다. 주로 var, let 및 const의 차이점과 ECMAScript와 JavaScript의 관계를 소개합니다. 관심 있는 친구들이 이 글을 살펴보는 것이 도움이 될 것입니다.

C 언어에서 const를 사용하는 방법 C 언어에서 const를 사용하는 방법 Sep 20, 2023 pm 01:34 PM

const는 상수, 함수 매개변수의 const 수정자, 수정된 const 함수 반환 값, 수정된 const 포인터를 선언하는 데 사용할 수 있는 키워드입니다. 자세한 소개: 1. 상수 선언 const 키워드는 프로그램 실행 중에 수정될 수 없습니다. 상수는 정수, 부동 소수점 숫자 등의 기본 데이터 유형일 수 있습니다. 2. 함수 매개변수의 const 한정자는 함수 매개변수에 사용될 수 있으며, 이는 매개변수가 함수 내에서 수정될 수 없음을 나타냅니다.

Windows 11에서 오디오 서비스가 응답하지 않는 문제를 해결하는 18가지 방법 Windows 11에서 오디오 서비스가 응답하지 않는 문제를 해결하는 18가지 방법 Jun 05, 2023 pm 10:23 PM

오디오 출력 및 입력이 Windows 11에서 예상대로 작동하려면 특정 드라이버와 서비스가 필요합니다. 때때로 백그라운드에서 오류가 발생하여 오디오 출력 없음, 오디오 장치 누락, 오디오 왜곡 등과 같은 오디오 문제가 발생합니다. Windows 11에서 응답하지 않는 오디오 서비스를 수정하는 방법 아래 언급된 수정 사항부터 시작하여 문제가 해결될 때까지 목록을 살펴보는 것이 좋습니다. Windows 11에서는 여러 가지 이유로 오디오 서비스가 응답하지 않을 수 있습니다. 이 목록은 Windows 11에서 오디오 서비스가 응답하지 못하게 하는 대부분의 문제를 확인하고 해결하는 데 도움이 됩니다. 프로세스를 진행하는 데 도움이 되도록 아래 관련 섹션을 따르세요. 방법 1: 오디오 서비스를 다시 시작합니다.

C++ 함수에서 const 키워드의 올바른 사용법은 무엇입니까? C++ 함수에서 const 키워드의 올바른 사용법은 무엇입니까? Apr 11, 2024 pm 02:36 PM

C++에서 const 키워드의 올바른 사용법: const를 사용하여 함수를 수정하는 것은 함수가 전달된 매개변수나 클래스 멤버를 수정하지 않는다는 것을 의미합니다. 함수 포인터를 선언하기 위해 const를 사용하는 것은 포인터가 상수 함수를 가리킨다는 것을 의미합니다.

See all articles