ホームページ >バックエンド開発 >PHPチュートリアル >PHP への改良されたオブジェクト指向アプローチに関するいくつかのメモ ページ 1/2_PHP チュートリアル

PHP への改良されたオブジェクト指向アプローチに関するいくつかのメモ ページ 1/2_PHP チュートリアル

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

先看代:

复制代代码如下:

class StrictCoownedClass {
private $arr = array('x' => NULL, 'y' => NULL);
function __construct()
{
print "StrictCoownedClass が作成されています";

」を印刷します;
}
function __destruct()
{
print "
";
print "StrictCoownedClass が破棄されています";
}
function __get($property)
{
if (array_key_exists($property, $this->arr)) {
return $this->arr[$property];
} else {
print "エラー: x と yn 以外のプロパティを読み取れません";
}
}
function __set($property, $value)
{
if (array_key_exists($property, $this->arr)) {
$this->arr[$property] = $value;
} else {
print "エラー: x と yn 以外のプロパティを書き込めません";
}
}
}
$obj = new StrictCoownedClass();
$obj->x = 1;
print $obj->x;

」を印刷します;
$obj->n = 2;

」を印刷します;
print $obj->n;
?>

出力結果:
StrictCooperativeClass が作成中
1
エラー: x & y 以外のプロパティを書き込めません
エラー: x & y 以外のプロパティを読み取れません
StrictCooperativeClass が破棄されています
__construct() と _ _destruct() は、Java のコンストラクターおよび C のデストラクターに相当します。
__get と __set については、以下を参照してください:
参照元: http://www.phpchina.com/html/54/26354-31906.html
.__set() __get() __isset() __unset() 4 つのアプリケーション
一般的に言えば、クラスの属性は常にプライベートとして定義します。これは、より現実的なロジックに沿ったものです。ただし、属性の読み取りと割り当ての操作は非常に頻繁に行われるため、PHP5 では、属性を取得して割り当てるための 2 つの関数「__get()」と「__set()」、および属性を確認するための「__isset」が事前定義されています。 )」と属性を削除するメソッド「__unset()」。
前のセクションでは、各属性の設定および取得メソッドを説明しました。PHP5 には、属性の値を設定および取得するための特別なメソッド「__set()」および「__get()」メソッドが用意されています。デフォルトで存在しますが、コンストラクター メソッド (__construct()) と同様に、これら 2 つのメソッドは次の方法で追加する場合にのみ存在します。個人的なスタイルに従って追加することもできます:
//__get() メソッドはプライベート プロパティを取得するために使用されます
private function__get($property_name)
{
if(isset($this->$property_name))
{
return ($this->$property_name);
}else
{
return(NULL);
}
}
//__set() メソッドはプライベート プロパティの設定に使用されます
private function__set($property_name,$value)
{
$this->$property_name=$value;
}
__get() メソッド: このメソッドは、メンバー属性の名前で渡されるパラメーターを 1 つ持ちます。取得したい属性値を返した場合、このメソッドを手動で呼び出す必要はありません。このメソッドをプライベート メソッドにすることもでき、プライベート属性が直接取得されるときにオブジェクトによって自動的に呼び出されます。 private プロパティはカプセル化されているため、値を直接取得することはできません (例: "echo $p1->name" を直接取得するのは誤りです)。ただし、このメソッドをクラスに追加する場合は、「 「echo $p1->name」は値を直接取得し、__get($property_name) メソッドが自動的に呼び出され、このメソッドの内部実行を通じてプロパティ名がパラメータ $property_name に渡されます。渡した属性の値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。
__set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。最初のパラメーターは、値を設定する属性の名前です。2 番目のパラメーターは、必要な値です。属性に設定する戻り値はありません。このメソッドは手動で呼び出す必要はありません。プライベート属性値を直接設定するときに、__set() メソッドがカプセル化されていない場合は自動的に呼び出されます。許可されます。例: $this->name='zhangsan' の場合、エラーが発生しますが、クラスに __set($property_name, $value) メソッドを追加すると、プライベート プロパティに値を直接割り当てることができます。 .property.time が自動的に呼び出され、$property_name に name などの属性が渡され、$value に代入される値 "zhangsan" が渡されます。このメソッドの実行により、代入の目的は達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。コードは次のとおりです。
classperson
{
//以下は個人のメンバー属性であり、すべてカプセル化されたプライベートメンバーです
private $name //個人の名前
private $sex; //人の性別
private $age; //人の年齢
//__get() メソッドはプライベートプロパティを取得するために使用されます
private function__get($property_name)
{
echo" はプライベートを直接取得するときにこの __get() を自動的に呼び出しますプロパティ値メソッド
";
if(isset($this->$property_name))
{
return($this->$property_name);
}
else
{
return(NULL);
}
}
//__set() メソッドはプライベート プロパティの設定に使用されます
private function__set($property_name,$value)
{
echo" プライベート プロパティの値を直接設定する場合、この __set() メソッドが自動的に呼び出されて割り当てられます。
";
$this->$property_name=$value;
}
}
$p1=newperson();
//プライベート プロパティに値を直接割り当てる場合、__set() メソッドが自動的に呼び出されます
$p1->name="Zhang San";
$p1->age=20;プライベート属性の値を直接取得すると、自動的に_ _get() メソッドが呼び出され、メンバー属性の値が返されます
echo"Name: ".$p1->name."
";性別: ".$p1->性別。"
";
エコー"年齢: ".$p1-> 年齢。"
";
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/319639.html技術記事まずコードを見てみましょう: 次のようにコードをコピーします: ?php class StrictCoownedClass { private $arr = array('x' = NULL, 'y' = NULL) function __construct() { print "StrictCoownedClass is...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。