PHP オブジェクト指向クラスの $this、static、final、const、self、および二重コロン: これらのキーワードの使用方法
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>
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; }}
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 yellowProgram 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
另外,如果从类的内部访问const或者static变量或者方法,那么就必须使用自引用的self,反之如果从类的内部访问不为const或者static变量或者方法,那么就必须使用自引用的$this。
在类定义外使用的话,使用类名调用。在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;?>
<?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"; }}
<?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();?>
<?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();?>
<?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"!?>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。

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

この記事では、Python の enumerate() 関数と「enumerate()」関数の目的について学びます。 enumerate() 関数とは何ですか? Python の enumerate() 関数は、データ コレクションをパラメータとして受け取り、列挙オブジェクトを返します。列挙オブジェクトはキーと値のペアとして返されます。キーは各項目に対応するインデックス、値は項目です。構文 enumerate(iterable,start) パラメータ iterable - 渡されたデータ コレクションは、iterablestart と呼ばれる列挙オブジェクトとして返すことができます。 - 名前が示すように、列挙オブジェクトの開始インデックスは start によって定義されます。無視したら

MySQL.proc テーブルの役割と機能の詳細な説明。MySQL は人気のあるリレーショナル データベース管理システムです。開発者が MySQL を使用する場合、多くの場合、ストアド プロシージャ (StoredProcedure) の作成と管理が必要になります。 MySQL.proc テーブルは非常に重要なシステム テーブルであり、ストアド プロシージャの名前、定義、パラメータなど、データベース内のすべてのストアド プロシージャに関連する情報が保存されます。この記事では、MySQL.proc テーブルの役割と機能について詳しく説明します。

C 言語における static の役割と使用法: 1. 変数スコープ; 2. ライフサイクル; 3. 内部関数; 4. グローバル変数の変更; 5. 関数の変更; 6. その他の用途; 詳細な紹介: 1. 変数スコープの場合変数の前に static キーワードがある場合、変数のスコープは、変数が宣言されているファイルに制限されます。言い換えると、変数は「ファイル レベルのスコープ」であり、「」の発生を防ぐのに非常に役立ちます。変数の重複定義問題; 2. ライフサイクル、静的変数はプログラム実行開始時に一度初期化され、プログラム終了時に破棄されるなど。
