如何使PHP类属性只能通过类Method更改

时间:2014-01-05 23:30:07

标签: php class properties

class Item {
     public $itemname;

     somekeyword $error; //The correct keyword I want to find

     public function insertData() {
          $query = "INSERT INTO table VALUES ('".$this->itemname."')";

          try {

                  //HERE THERE IS A NICE CODE TO EXECUTE THE QUERY AND SO...
                  return true; //Returns true on success
          } catch(PDOExecption e) {
                 $this->error = $PDOObject->errorInfo();
                 return false; //Returns false on FAIL but the Object has a property with the error information
          }

     }

}

如何使属性错误仅对此类方法可更改?我不希望它可以被其他类或文件在外面更改。

关键字“protected”是否可以使其在外部读取但不可更改?

谢谢!

2 个答案:

答案 0 :(得分:4)

protected使得它无法从外部访问,PHP中的属性没有只读关键字,要获得其值,您必须定义getter函数:

class Item {
     protected $error; 
     public function getError(){
         return $this->error;
     }
}

或使用一些'魔术':

class Item {
     protected $error; 
     public function __get($name){
         return $this->$name;
     }
}

后一个允许您仅通过$object->error;访问此属性,但其可读性较低,并且比预定义的函数调用稍慢。

答案 1 :(得分:0)

您要么是私有的还是受保护的。如果您希望它可以通过扩展您的类的类访问,则受保护,否则为private。

http://www.php.net/manual/en/language.oop5.inheritance.php