ホームページ > php教程 > php手册 > 改良されたオブジェクト指向 PHP についての簡単な説明 ページ 1/2

改良されたオブジェクト指向 PHP についての簡単な説明 ページ 1/2

WBOY
リリース: 2016-06-13 12:25:57
オリジナル
824 人が閲覧しました

先看代:

复制代代码如下:


class StrictCoownedClass {
private $arr = array('x' => NULL, 'y' => NULL);
function __construct()
{
print "StrictCoownedClass が作成されています";
print "
";
}
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;
print "
";
$obj->n = 2;
print "
";
print $obj->n;
?>


出力結果:
StrictCoownedClass is being created
1
エラー: x & y 以外のプロパティを書き込めません
エラー: x & y 以外のプロパティを読み取れません
StrictCoownedClass が破棄されています
__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->) ;$プロパティ名))
{
return($this->$property_name);
}else
{
return(NULL)
} //__set() メソッドはプライベート プロパティを設定するために使用されます。
private function__set($property_name,$value)
{
$this->$property_name=$value;
__get() メソッド: このメソッドは、プライベート メンバー属性値を取得するために使用されます。パラメーターは、取得するメンバー属性の名前で渡され、取得された属性値は返されません。このメソッドは、プライベート プロパティが直接取得されたときにオブジェクトによって自動的に呼び出されるプライベート メソッドにすることもできるため、手動で呼び出す必要があります。 private プロパティはカプセル化されているため、値を直接取得することはできません (例: "echo $p1->name" を直接取得するのは誤りです)。ただし、このメソッドをクラスに追加する場合は、「 「echo $p1->name」は値を直接取得し、__get($property_name) メソッドが自動的に呼び出され、このメソッドの内部実行を通じてプロパティ名がパラメータ $property_name に渡されます。渡した属性の値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。
__set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。最初のパラメーターは値を設定する属性の名前で、2 番目のパラメーターは属性に設定する値。戻り値はありません。このメソッドは手動で呼び出す必要はなく、プライベート属性値を直接設定するときに、
メソッドが存在しない場合に自動的に呼び出されます。は許可されません。例: $this->name='zhangsan' の場合、エラーが発生しますが、__set($property_name, $value) メソッドをクラスに追加すると、プライベート プロパティを直接設定できます。値を代入すると自動的に呼び出され、$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() メソッドが自動的に呼び出され、値が割り当てられます。 private property
";
$this->gt;$property_name=$value;
}
}
$p1=newperson();
//直接代入する操作プライベート プロパティの値は、自動的に __set() メソッドを呼び出して値を割り当てます。
$p1->name="Zhang San"; >$p1->age=20;
//プライベート属性の値を直接取得すると、__get() メソッドが自動的に呼び出され、メンバー属性の値が返されます
echo "Name:"。 $p1->名前."
";
echo"性別:".$p1->性別."
echo"年齢:"; ;年齢。"
?>;
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート