我快速浏览了一些与我的问题类似的问题,但没有一个答案完全触及我遇到的问题。
我有两个文件。 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 中定义的类试过了,效果很好。这让我觉得我的文件路径可能有问题,但文件名拼写正确,文件位于同一目录中,所以我不太确定。
最佳答案
解释
首先,在您的类中,您为构造函数指定了一个变量。但是,这个变量是强制性的(意思是,没有默认值)。因此,在实例化新产品时,您必须提供一个值。
此外,如果您使用的是构造函数,则无需在调用构造函数之前为变量提供默认值。
也就是说,如果您想在不调用方法的情况下访问您的值,有很多解决方案。
方案一:实例化直接调用变量
class Product {
public $var = 'a default value';
}
$product = new Product();
echo $product->var;
解决方案 2:使用访问器获取 protected /私有(private)值
class Product {
protected $var = 'a default value';
public function getVar() {
return $this->var;
}
}
$product = new Product();
echo $product->getVar();
方案三:使用构造函数初始化值
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();
方案四:使用静态变量
class Product {
public static $var = 'a default value';
}
echo Product::$var;
解决方案 5:使用具有 protected 静态值的静态方法
class Product {
protected static $var = 'a default value';
public static function getVar() {
return self::$var;
}
}
echo Product::getVar();
文档
关于php - 从 PHP 类回显变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41261213/