ホームページ >バックエンド開発 >PHPチュートリアル >PHPクラスのself、parent、thisの違いとexamples_PHPチュートリアルの紹介
一つ、これ
1. これを使用するには、オブジェクト コンテキストが必要です。そうでない場合は、致命的なエラー: オブジェクト コンテキストにない場合の $this の使用というエラーが報告されます。
2. このクラスのメソッドと属性、または親クラスの調整可能なメソッドと属性を呼び出すことができます
二人、自分
1. self は、このクラスの静的プロパティと静的メソッドにアクセスでき、親クラスの静的プロパティと静的メソッドにアクセスできます。
2. self を使用する場合はインスタンス化する必要はありません
三、親
1. 親は親クラスの静的プロパティと静的メソッドにアクセスできます。
2. 親を使用する場合はインスタンス化する必要はありません
クラステスト{
public $public;
private $private;
protected $protected;
static $instance;
static $good = 'tankzhang
';
public $tank = 'zhangying
';
public function __construct(){
$this->public = 'public
';
$this->private = 'private
';
$this->protected = 'protected < ;br>';
Public 関数 Tank () {// Private メソッドは継承できず、Public, ProteCted に置き換えられます
IF (! Isset (Self :: Get_class ()])
{
$ c = get_class ();
self:: $instance = new $c;
}
return self::$instance;
}
echo "あなたは public function
をリクエストしています";
echo $this->public;
}
protected function pro_function(){
echo "あなたは protected function
をリクエストしています";
echo $this->protected;
}
プライベート関数 pri_function(){
echo "プライベート関数をリクエストしました
";
echo $this->private;
}
static 関数 sta_function(){
echo "静的関数をリクエストしました
";
}
}
クラス test1 はテストを拡張します{
static $love = "tank
private $aaaaaaa = "ying
";
parent::tank();
parent::__construct();
}
パブリック関数tank(){
echo $this->public;
echo $this->protected;
echo $this->aaaaaaa;
$this->pro_function();
}
echo self::$love;
echo self::$good;
echoparent::$good;
echoparent::$tank; //致命的なエラー: 未宣言の静的プロパティへのアクセス: test::$tank
echo self::$tank; //致命的なエラー: 宣言されていない静的プロパティへのアクセス: test::$tank
}
static function extends_function(){
parent::sta_function();
self:: pro_function();
echo "extends_private 関数をリクエストしました
";
}
}
error_reporting(E_ALL);
$test = new test1();
$test->tank(); //サブクラスと親クラスには同じ名前の属性とメソッドがあります。サブクラスがインスタンス化されると、サブクラスも同じ名前になります。でメソッドが呼び出されます。
test1::test1_function();
test1::extends_function(); //一部の実行後、致命的なエラーが報告されます: D:xampphtdocsmytestwww4.php の 32 行目でオブジェクト コンテキストにない場合に $this を使用します
?>
1. $test->tank(); メソッドを呼び出すと、タンク内の $this はこのクラスと親クラスのメソッドと属性を呼び出すことができます。
2, test1::test1_function(); 静的メソッドを使用して非静的メソッドを呼び出すと、非静的メソッド test::test1_function() を静的に呼び出してはいけないという警告が表示されます。いいえ、自分自身はできます。このクラスを呼び出すとき、親は親クラスの静的プロパティを呼び出すことができます。非静的プロパティを呼び出すと、どちらもエラーを報告します。コード内にコメントがあります3, test1::extends_function(); このステップでは、$this がオブジェクト以外で使用されていることを報告するエラーが報告されます。これはなぜでしょうか? test1::extends_function(); はクラス内のメソッドを呼び出すだけでインスタンス化されないため、親クラスで $this が使用されるとエラーが報告されます。
http://www.bkjia.com/PHPjc/326809.html
を呼び出すことができます