我快速浏览了一些与我相似的问题,但没有一个答案能够解决我遇到的问题.
我有两个文件. product.php和index.php. Product.php定义了产品类,我只是使用index.php作为输出变量的页面.理想情况下,这将用于将来输出来自不同类的对象.
product.php
class Product{
public $var = "a default value";
public function __construct($var){
$var = $var;
}
public function displayVar(){
echo $this->var;
}
}
index.php(全部包含在php标签中)
require_once("product.php");
$product = new Product();
echo $product->var;
我尝试了不同的方法来包含文件(require,include,include_once).我不确定这是不是问题.
我得到的问题是$product-> var不输出.相反,我收到以下错误:
Notice: Undefined property: Product::$var in C:\xampp\htdocs\FurnitureWebsite\index.php on line 21
我不完全确定为什么它会考虑这个变量未定义.我浏览了关于类和属性的PHP文档,但没有看起来真正的答案.
最后一点:我用index.php中定义的类尝试了这个,它运行正常.这让我觉得我的文件路径可能有问题,但文件名拼写正确,文件在同一个目录中,所以我不完全确定.
解决方法:
解释相关
首先,在您的类中,您为构造函数指定了一个变量.但是,这个变量是强制性的(意思是,没有默认值).因此,在实施新产品时,您必须提供一个价值.
此外,如果您使用的是构造函数,则在调用构造函数之前无需为变量赋予默认值.
也就是说,如果你想在不调用方法的情况下访问你的价值,那么就有很多解决方案.
解决方案1:实例化并直接调用变量
class Product {
public $var = 'a default value';
}
$product = new Product();
echo $product->var;
解决方案2:使用访问器获取受保护/私有值
class Product {
protected $var = 'a default value';
public function getVar() {
return $this->var;
}
}
$product = new Product();
echo $product->getVar();
解决方案3:使用构造函数初始化值
class Product {
protected $var;
public function __construct($var = 'a default value') {
$this->var = $var;
/* $this->var stands for protected $var */
/* $var stands for... $var in the parameters */
}
public function getVar() {
return $this->var;
}
}
$product = new Product(); /* no value, so $var = 'a default value'; */
echo $product->getVar();
解决方案4:使用静态变量
class Product {
public static $var = 'a default value';
}
echo Product::$var;
解决方案5:使用具有受保护静态值的静态方法
class Product {
protected static $var = 'a default value';
public static function getVar() {
return self::$var;
}
}
echo Product::getVar();
文档
标签:php,oop,properties,class
来源: https://codeday.me/bug/20190623/1266607.html