2015-09-02 33 views
-2

过去几个小时我一直在使用PHP进行项目,遇到了问题。PHP:在类中获取访问私有变量

问题是我不知道如何访问类中的私有变量,我无法在线找到它。

例子:

<?php 
    class Example{ 
     private $age; 

     public function __construct() { 
      $age = 14; 
      $this->checkAge(); 
     } 
     private function checkAge() { 
      if($this->$age > 12) 
       echo "welcome!"; 
     } 
    } 
    $boy = new Example(); 
?> 

据我知道,我应该能够使用$此访问变量 - > $年龄,但它无法正常工作。

谢谢。

编辑:得到它与真棒stackoverfloooooooow社区的帮助下工作,这是一个工作的外观。

<?php 
    class Example{ 
     private $age; 

     public function __construct() { 
      $this->age = 14; 
      $this->checkAge(); 
     } 
     private function checkAge() { 
      if($this->age > 12) 
       echo "welcome!"; 
     } 
    } 
    $boy = new Example(); 
?> 
+0

@PaulCrovella你为什么不创建添加评论的答案insetad?这是在stackoverflow世界里的某种策略吗? – Amarnasan

+0

好的,谢谢,它工作,我需要访问$ this-> age –

回答

0

看看这种方法。
第一:创建实体,其存储和私有属性$数组内检索数据,并与魔__set(),__get()也可以这样做:$对象 - >变量= 123

第二:与人类扩展的实体,并添加一些特定于子类的功能(例如hasValidAge()):

<?php 
    class Entity { 
     private $attributes; 

     public function __construct($attributes = []) { 
      $this->setAttributes($attributes); 
     } 

     public function setAttribute($key, $value) { 
      $this->attributes[$key] = $value; 
      return $this; 
     } 

     public function setAttributes($attributes = []) { 
      foreach($attributes AS $key => $value) { 
       $this->setAttribute($key, $value); 
      } 
     } 

     public function getAttribute($key, $fallback = null) { 
      return (isset($this->attributes[$key]))? 
        $this->attributes[$key] : $fallback; 
     } 

     public function __get($key) { 
      return $this->getAttribute($key); 
     } 

     public function __set($key, $value) { 
      $this->setAttribute($key, $value); 
     } 
    } 

    class Human extends Entity { 
     public function __construct($attributes = []) { 
      $this->setAttributes($attributes); 
      $this->checkAge(); 
     } 

     public function hasValidAge() { 
      return ($this->getAttribute('age') > 12)? true : false; 
     } 
    } 

    $boy = new Human(['name' => 'Mark', 'age' => 14]); 
    if($boy->hasValidAge()) { 
     echo "Welcome ".$boy->name."!"; 
    } 

?> 

PS我删除了回声“欢迎!”部分来自构造函数,因为从模型对象进行回声并不酷,在我们的例子中,人类是实体的模型。