我快速浏览了一些与我相似的问题,但没有一个答案能够解决我遇到的问题。
我有两个文件。 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中定义的类尝试了这个,它运行正常。这让我觉得我的文件路径可能有问题,但文件名拼写正确,文件在同一个目录中,所以我不完全确定。
答案 0 :(得分:1)
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0xffffffff addr=0x0 pc=0x20314]
goroutine 1 [running]:
panic(0x112c00, 0x1040a038)
/usr/local/go/src/runtime/panic.go:500 +0x720
main.main()
/tmp/sandbox675251439/main.go:23 +0x314
Program exited.
答案 1 :(得分:1)
class Product{
protected $var;
public function __construct($var = "a default value"){
$this->var = $var;
}
public function getVar(){
return $this->var;
}
}
$product = new Product();
echo $product->getVar();
new Product('your value')
上给出一个值,您的示例没有赋予构造函数的值$var=$var
做$this->var=$var
__construct($var = "a default value")
中设置默认值,优于直接在属性protected
不是public
否则不需要getter,变量可以直接从外部更改getter
,返回值,而不是echo
。多数民众赞成。
答案 2 :(得分:1)
在你的构造函数中你有这个:
public function __construct($var){
$var = $var;
}
将其更改为:
public function __construct($var){
$this->var = $var;
}
目前它只是将传递的变量设置为自身。
第二件事是在index.php文件中创建一个这样的对象:
$product = new Product();
因为你的构造函数需要一些变量,你应该总是提供这样的变量。 例如:
$product = new Product('new text');
我可以看到你有一个显示变量的方法。这很好,虽然常见的是创建这样的变量protected
,然后创建一个public
getter
方法来从类外部访问受保护的变量。
然后你可以简单地从index.php文件中调用你的方法,如下所示:
$product->displayVar();
或创建将返回变量的getter方法并将其显示在index.php文件中。 例如
/**product.php**/
public function getVariable() {
return $this->var;
}
/**index.php**/
$product = new Product('new text');
echo $product->getVariable();
这取决于您是否只需要显示此变量,或者您知道,您将需要此变量用于其他事项。无论哪种方式,我认为创造吸气剂也更好,因为一个好习惯。
我希望它有所帮助。祝你好运!
答案 3 :(得分:1)
首先,在您的类中,您为构造函数指定了一个变量。但是,这个变量是强制性的(意思是,没有默认值)。所以在实施新产品时,您必须提供一个值。
此外,如果您正在使用构造函数,则在调用构造函数之前无需为变量赋予默认值。
也就是说,如果你想在不调用方法的情况下访问你的价值,那么就有很多解决方案。
class Product {
public $var = 'a default value';
}
$product = new Product();
echo $product->var;
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;
class Product {
protected static $var = 'a default value';
public static function getVar() {
return self::$var;
}
}
echo Product::getVar();
答案 4 :(得分:0)
你有
public function __construct($var){
$var = $var;
}
应该是:
public function __construct($var){
$this->var = $var;
}
答案 5 :(得分:0)
请修改您的代码
<强> Product.php 强>
<?php class Product{
public $var ;
public function __construct($var){
$this->var = $var;
} } ?>
<强>的index.php 强>
<?php require_once 'product.php';
$product = new Product('a default value');
echo $product->var; ?>
它可能对你有帮助。
由于