PHP の _set() と _get() について
この 2 つの関数はプライベート変数に使用されているとネットで言われていますが、これはクラスのカプセル化に違反していませんか?
$this->$varName を使用する場合があり、$this->varName に「$」が必要な場合があるのはなぜですか? ? ?
時間があれば、コードのどこが間違っているかを確認してください。
class MyClass
{
private $Age;
private $Grade <🎜; > public function __construct($name)
{
$this->MyName = $name;
$this->Age = 5;
}
public function _get( $property_name )
{
echo 'access_get()
';
if (isset($property_name))
{
return $this->$ property_name;
}
}
public function _set($property_name, $value)
{
echo 'Access_set()
';
$this ->$property_name = $value;
}
}
$obj = new MyClass('Tom');
$obj->Age = 23;//こう言ってください エッジエラー $obj- >$Age もエラーです
?>
-----解決策----- ----
エラーは $ にはありません。
まず、定義するのはクラスのプライベート メンバー変数です。プライベート変数はクラス内でのみ呼び出すことができます。
$obj->Age = 23; 権限が不十分で外部呼び出しが禁止されているため、明らかに呼び出すことができません。
$obj->$Age = 23; も間違っています。まず、php は $Age を自動的に識別し、それが空であることを検出します。これは、$obj->=23;変更しました コードを見れば分かると思いますが、現状ではクラスの変数呼び出しレベルがまだ理解できていません。
PHP コード
MyName = $name;
$this->年齢 = 5;
}
パブリック関数 _get($property_name)
{
echo 'Access_get()
';
if (isset($property_name))
{
$this->$property_name を返します;
}
}
パブリック関数 _set($property_name, $value)
{
echo 'Access_set()
';
$this->$property_name = $value;
}
}
$obj = 新しい MyClass('トム');
//$obj->年齢 = 23;
$obj->_set('年齢', 'hello world');
echo $obj->_get('年齢');
$Age = 'テスト';
$obj->$Age = 'こんにちは、ディファ';
echo $obj->test;