好的,所以我对PHP很新,但这让我很烦恼。当我尝试转储var时,我得到一个“无法访问受保护的属性Database :: $ database”。为什么$ db对象无法访问$ database?在涉及对象时,我是否误解了“私有”,“受保护”和“公共”关键字?
class Database
{
protected $database;
function __construct()
{
$this->database = new PDO("mysql:host=localhost;dbname=myDB", "root", "password");
}
}
$db = new Database();
var_dump($db->database);
答案 0 :(得分:2)
您的受保护属性仅在类(和扩展类...)中可用,因此在类中的方法中您可以使用$this->database
但在类之外,您需要一个getter来访问它的值,像:
在课堂上:
public function getDB()
{
return $this->database;
}
课外:
var_dump($db->getDB());
答案 1 :(得分:0)
答案 2 :(得分:0)
下面,“Item”= property(类范围变量)或方法,“visited”=调用(方法)或直接使用/更改(属性)。
要访问可用范围之外的私有或受保护属性,请使用公共getter / setter方法。
编辑:所以要回答你为什么会收到错误的问题,你在可用的类的受保护属性 上调用var_dump()。由于它受到保护,因此无法在全球范围内使用。你可以将var_dump()移动到类中的一个方法(并记住在从内部引用对象时使用$ this),或者你可以使用getter方法返回值,然后使用var_dump()。