検索
ホームページバックエンド開発PHPチュートリアルthis、self、parent、および PHP の二重コロンの使用法の違いは次のとおりです。

this、self、parent、および PHP の二重コロンの使用法の違い::

PHP5 は、オブジェクト指向言語のほとんどの機能を備えた言語です。さらに多くのオブジェクト指向機能を備えています。 PHP4 よりも少しわかりにくい概念もありますので、説明が苦手な方はご容赦ください (この記事を読むには、PHP5 のオブジェクト指向の知識が必要です。 )
まず、3 つのキーワードを理解しましょう: this、self、parent、文字通り理解するのが簡単です。これは、this、self、father、haha を指します。最初にいくつかの概念を確立しましょう。これら 3 つのキーワードが使用されていますか? 予備的な説明をしましょう。これは現在のオブジェクトへのポインター (ここでは C のポインターを使用しましょう)、self は現在のクラスへのポインター、parent は親クラスへのポインターです。

まだよくわかっていないので、実例をもとにお話していきます。
(1) this
class UserName
{
??? // 属性を定義します???
???
???? // コンストラクター
??? 関数 __construct( $name )
???? {
name = $name ; //このポインタ
???? }
???? //デストラクタ
????関数__destruct(){}
???? / /ユーザー名メンバー関数
???? function printName()
???? {
????????? print( $this->name ); // このポインターを再度使用します?? ?? }
}
//オブジェクトをインスタンス化します
$nameObject = new UserName( "heiyeluren" );
//印刷を実行します
$nameObject ->printName();出力: heiyeluren
//オブジェクトの 2 番目のインスタンス化
$nameObject2 = new UserName( "PHP5" );
//印刷を実行します
$nameObject2- >printName(); //出力: PHP5
?>
上記のクラスがそれぞれ 11 行目と 20 行目でこのポインターを使用していることがわかりますが、その時点でこれは誰を指しているのでしょうか?実際、これはオブジェクトをインスタンス化するときに誰を指すかを決定します。たとえば、オブジェクトが初めてインスタンス化されるとき (25 行目)、this は $nameObject オブジェクトを指します。その後、18 行目で print( $this. ->name ) になると、当然 "heiyeluren" が出力されます。 2 番目のインスタンスでは、 print( $this->name ) は print( $nameObject2->name ) になるため、「PHP5」が出力されます。したがって、これは現在のオブジェクト インスタンスへのポインターであり、他のオブジェクトやクラスを指すものではありません。
?
?
(2)self
まず第一に、self がクラス自体を指していること、つまり self がインスタンス化されたオブジェクトを指していないことを明確にする必要があります。 self は静的変数を指すために使用されます。
???? class Counter
???? //静的変数を含む属性を定義します。 ???? private static $firstCount = 0;
??????? private $lastCount;
?????? __construct()
????????? {
????????? $this->lastCount = selft::$firstCount;静的変数を呼び出すには、次を使用する必要があります:: (フィールド操作記号)
?????????? }
???????値
???????関数 printLastCount()
?????????{
???????????? print( $this ->lastCount ) ;
????????? }
??? }
//インスタンス化されたオブジェクト
$countObject = new Counter();
$countObject- >printLastCount() //出力 1
?>

ここで注意する必要があるのは、6 行目と 12 行目の 2 か所だけです。 2 行目で静的変数 $firstCount を定義し、初期値は 0 です。次に、12 行目でこの値を呼び出し、self を使用して呼び出し、途中で接続するために "::" を使用しました。ドメイン演算子を呼び出すと、この時点で呼び出すのはクラス自体によって定義された静的変数 $frestCount です。静的変数は次のオブジェクトのインスタンスとは関係がなく、クラスにのみ関連します。クラス自体の場合、this を使用して参照することはできません。self はクラス自体を指しており、オブジェクト インスタンスとは何の関係もないため、self を使用して参照できます。言い換えれば、クラスに静的メンバーがある場合は、それらを呼び出すために self も使用する必要があります。
(3)parent
parent は親クラスへのポインタであることがわかっています。通常、親クラスのコンストラクタを呼び出すにはparentを使用します。
//基本クラス
class Animal
{
??? //基本クラス
の属性???? public $name;
??? // 基本クラスのコンストラクター関数
??? public function __construct( $name )
???? $this->name = $name;
????? }
}
//派生クラス
クラス person 拡張 Animal クラス
{
??? personSex; //Gender
??? public $personAge; //Age
???? 関数 __construct( $personSex, $personAge ) ??? {
?????????parent::__construct( "heiyeluren" ); //親クラスのコンストラクターを呼び出します。 ? $this->personSex = $personSex;
???? $this->personAge = $personAge;
??? }
???? >???? {
????????? print( $this->name. " は " .$this->personSex. "、今年は " .$ this-> personAge );
?????? }
}
// Person オブジェクトをインスタンス化します
$personObject = new Person( "male", "21");
// 実行print
$personObject->printperson(); //出力: heiyeluren は今年 21 歳です
?>

次のいくつかの詳細に注目します: メンバー属性はすべてですpublic、特に親クラス、継承されたクラスがこれを通じてアクセスできるようにします。重要な点である 25 行目:parent::__construct( "heiyeluren" ) に注目してください。このとき、親クラスのメンバーは次のとおりであるため、parent を使用して親クラスのコンストラクターを呼び出し、親クラスを初期化します。すべて public なので、これを直接使用して継承されたクラスを呼び出すことができます。


一般に、これは現在のオブジェクトのインスタンス、静的変数、const 定数、およびコンストラクターです。オブジェクトのインスタンスとは何の関係もありません。したがって、これを使用します。 ::

プログラム リスト: クラス定義の外部にアクセスするには変数を使用します

???
??? class Fruit {

??? ? const CONST_VALUE = 'フルーツの色' ;

??? $classname = 'フルーツ';
??? / PHP 5.3.0以降
????
??? echo Fruit::CONST_VALUE;
??? ?>
プログラムリスト: クラス定義の外で使用されます。 >??? ??? クラス フルーツ {
????? const CONST_VALUE = 'フルーツの色';
??? 🎜>??? クラス Apple は Fruit
??? {
??????? public static $color = 'Red';
????
??? ?? public static function doubleColon() {
????????? echoparent::CONST_VALUE . "n";
????????? . "n";
???
??? >

プログラムの実行結果:
1??? フルーツの色 赤
プログラム リスト: 親メソッド
???
クラス Fruit
??? {
????????? 保護された関数 showColor() {
????????? echo "Fruit::showColor()n";
? ???? ? }
???
??? クラス Apple は Fruit
??? //親の定義をオーバーライドします

???????? public function showColor()

????????? // ただし、親関数を呼び出します
?????親::showColor();
?????????エコー "Apple::showColor()n";
??? ??? ? }
??? }
??? $apple = new Apple();
??
??? ?>

プログラムの実行結果:
1??? Fruit::showColor()
プログラム リスト: スコープ修飾子
???
??????? クラスを使用します。 function showColor()
???????????? {
???????????? return $this->color;
???? ??????? }
?????? }
?????? クラス バナナ{
????????? public $color;
????????? パブリック関数 __construct()
???? ?????{
????????????$this->color = "バナナは黄色です";
?????? }
??????

???????????? パブリック関数 GetColor()

?????????{
????????? ???? return Apple::showColor();///スコープ修飾子を使用します
????????????}
?????? }
?? ????
?????? $banana = 新しいバナナ;
????? echo $banana->GetColor( );
??? 🎜>

プログラムの実行結果:
1??? バナナは黄色です
プログラム リスト: 基本クラスのメソッドの呼び出し
???
?? ? クラス フルーツ
??? {
??????? 戻り値color";
????????? }
????
??????? 静的関数 showColor()
????????? {
?????????? エコー " . self::color();
??? }
???
??? クラス Apple は Fruit
??? {
??????? {
?????? ?????? "赤" を返します;
???? }
????
??? 🎜 >??? // 出力は「カラーを表示」です!
????
プログラムの実行結果:
1??? 🎜 >
?

?

?


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
function是什么意思function是什么意思Aug 04, 2023 am 10:33 AM

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果,其目的是封装一段可重复使用的代码,提高代码的可重用性和可维护性。

iOS的developer版和public版有什么区别?iOS的developer版和public版有什么区别?Mar 01, 2024 pm 12:55 PM

每年Apple发布新的iOS和macOS大版本之前,用户都可以提前几个月下载测试版抢先体验一番。由于公众和开发人员都使用该软件,所以苹果公司为两者推出了developer和public版即开发者测试版的公共测试版。iOS的developer版和public版有什么区别呢?从字面上的意思来说,developer版是开发者测试版,public版是公共测试版。developer版和public版面向的对象不同。developer版是苹果公司给开发者测试使用的,需要苹果开发者帐号才可以收到下载并升级,是

如何在Python中访问父类属性?如何在Python中访问父类属性?Aug 26, 2023 am 10:17 AM

Inobject-orientedprogramming,inheritanceallowsustocreatenewclassesthatinheritthepropertiesandmethodsofanexistingclass.Thispowerfulconceptenablescodereuse,modularity,andextensibilityinourprograms.Beforedivingintoaccessingparentclassattributes,let'shav

"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表的作用和功能

Vue.use函数的用法和作用Vue.use函数的用法和作用Jul 24, 2023 pm 06:09 PM

Vue.use函数的用法和作用Vue是一款流行的前端框架,它提供了许多有用的功能和功能。其中之一就是Vue.use函数,它可以让我们在Vue应用中使用插件。本文将介绍Vue.use函数的用法和作用,并且提供一些代码示例。Vue.use函数的基本用法非常简单,只需在Vue实例化之前调用它,并传入要使用的插件作为参数。下面是一个简单的示例://引入并使用插件

在PHP中的file_exists()函数在PHP中的file_exists()函数Sep 14, 2023 am 08:29 AM

file_exists方法检查文件或目录是否存在。它接受要检查的文件或目录的路径作为参数。以下是它的用途-当您需要在处理之前知道文件是否存在时,它非常有用。这样,在创建新文件时使用此函数即可知道该文件是否已存在。语法file_exists($file_path)参数file_path-设置要检查是否存在的文件或目录的路径。必需。返回file_exists()方法返回。如果文件或目录存在,则返回TrueFalse,如果文件或目录不存在示例让我们看一个检查“candidate.txt”文件和即使文件

js函数function用法是什么js函数function用法是什么Oct 07, 2023 am 11:25 AM

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター