ホームページ > バックエンド開発 > PHPチュートリアル > PHP オブジェクト指向クラスの $this、static、final、const、self、および二重コロン: これらのキーワードの使用方法

PHP オブジェクト指向クラスの $this、static、final、const、self、および二重コロン: これらのキーワードの使用方法

WBOY
リリース: 2016-06-13 12:12:19
オリジナル
1181 人が閲覧しました

PHP オブジェクト指向クラスでこれらのキーワード $this、static、final、const、self、および二重コロンを使用する方法。

PHP における this、self、parent の 3 つのキーワードの役割

3 つのキーワード this、self、parent の違いは、文字通り、より簡単ですこれを参考にして、私と父をそれぞれ理解してください。まず、いくつかの概念を確立しましょう。これら 3 つのキーワードがどこで使用されているかを簡単に説明します。これは現在のオブジェクトへのポインターです (C のポインターを使用して見てみましょう)self は現在のクラス へのポインタ、parent は親クラス へのポインタです。ここでの説明にポインタを頻繁に使用しますが、これはおそらく、それを表現するのにこれ以上適した言語がないためです。

<?php<span style="color:#ff0000;">// this是指向当前对象的指针</span>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-> メソッド
例は次のとおりです。 >
コードの表示 print
<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>
ログイン後にコピー
クラス内の現在のクラスのプロパティとメソッドを呼び出すメソッドは 3 つあります。self、parent です。 、$this、these 3 つのキーワードの違いは次のとおりです: self は現在のクラスを指すために使用され、parent は現在のクラスの親クラスを指すために使用されます。親クラス; $this は、クラス本体およびメソッド内で独自のプロパティを呼び出すために使用されます。

static

キーワードは self (クラス内で静的メンバーを呼び出すときに使用)、静的メンバーのクラス名 ( class クラス内の静的メンバーを呼び出すときに使用します)
次のように静的変数を宣言します:
static $val='';
関数のスコープ内にのみ存在する変数。グローバル変数は代わりに使用されないため、関数の実行後に変数の値は失われません。 はすべての関数からアクセスされるため、保守が困難になる可能性があります。
クラスで static を使用する主な用途は 2 つあり、静的メンバーの定義と静的メソッドの定義です。静的メンバーは、次のようにすべてのインスタンス で有効な変数の値のみを保持します:
<?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 人の訪問者です
もう 1 つ注意すべき点は、クラス メソッドが静的である場合、アクセスするプロパティも静的である必要があります。

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




関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート