ホームページ  >  記事  >  バックエンド開発  >  PHPクラスのself、parent、thisの違いとexamples_PHPチュートリアルの紹介

PHPクラスのself、parent、thisの違いとexamples_PHPチュートリアルの紹介

WBOY
WBOYオリジナル
2016-07-21 15:11:58735ブラウズ

一つ、これ

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>';

B}

Public 関数 Tank () {// Private メソッドは継承できず、Public, ProteCted に置き換えられます
IF (! Isset (Self :: Get_class ()])
{
$ c = get_class ();
self:: $instance = new $c;
}
return self::$instance;
}

public function pub_function() {

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
";

パブリック関数__construct(){

parent::tank();
parent::__construct();
}
パブリック関数tank(){
echo $this->public;
echo $this->protected;
echo $this->aaaaaaa;
$this->pro_function();
}

public function test1_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

tru​​ehttp://www.bkjia.com/PHPjc/326809.html技術記事 1. this 1. これを使用するには、オブジェクト コンテキストが必要です。そうでない場合は、エラー「致命的エラー: オブジェクト コンテキスト内にないときの $this の使用」が報告されます。 2. これは、このクラスのメソッドと...
を呼び出すことができます
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。