关于PHP的_set()跟_get()

WBOY
풀어 주다: 2016-06-13 10:57:23
원래의
986명이 탐색했습니다.

关于PHP的_set()和_get()
网上说这两个函数是对私有变量使用,这不是违背类的封装性吗?
为什么有时候用$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 '访问_get()
';
if (isset($property_name))
{
return $this->$property_name;
}
}
public function _set($property_name, $value)
{
echo '访问_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 code
<?phpclass MyClass{private $Age;private $Grade;public $test;public function __construct($name){$this->MyName = $name;$this->Age = 5;}public function _get($property_name){echo '访问_get()<br>';if (isset($property_name)){return $this->$property_name;}}public function _set($property_name, $value){echo '访问_set()<br>';$this->$property_name = $value;}}$obj = new MyClass('Tom');//$obj->Age = 23;$obj->_set('Age', 'hello world');echo $obj->_get('Age');$Age = 'test';$obj->$Age = 'hello difa';echo $obj->test;<div class="clear">
                 
              
              
        
            </div>
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!