0

我是 PHP 新手。我以前的经验是在 Java 中。

我有以下问题:

我有 class product,其中有私有变量和公共 getter。我还有一个文件索引,我在其中创建了 object Product。我使用. 传递Product给类中的一个函数。在我有这个:DBdo_something($product)DB

public function ($product) {
    echo $product->getParam;
}

问题:注意:未定义的属性:product::$getParam

如何解决?

4

2 回答 2

0

就像在 Java 中一样,当访问对象的方法时,包括括号。

代替:

public function someMethod($product) {
   echo $product->getParam;
}

利用:

public function someMethod($product) {
   echo $product->getParam();
}

更好的是遵循psr2并这样写:

public function someMethod($product)
{
   echo $product->getParam();
}

更好的是包含预期的类类型作为类型提示:

public function someMethod(Product $product)
{
   echo $product->getParam();
}

当你不放括号时,你正在访问一个属性。如果该财产以该名称存在getParam(并且是公开的),那也可以。

于 2018-09-16T22:53:19.820 回答
-1

首先缺少一个函数名,我myFunction在下面使用。
然后你应该检查产品是否是一个对象:

public function myFunction ($product){
    if (is_object($product)) {
        ...
    } else {
        # catch the error / fault
    }
}

然后你必须考虑这getParam可能是一个函数并且没有公共属性/变量,所以你必须这样写:

public function myFunction ($product){
    if (is_object($product)) {
        echo $product->getParam();
    } else {
        # catch the error / fault
    }
}

此外,该函数getParam可能需要一个参数来决定返回什么,那么该函数看起来像这样:

public function myFunction ($product){
    if (is_object($product)) {
        echo $product->getParam($param);
    } else {
        # catch the error / fault
    }
}

现在您的问题是,新变量param未定义(至少未在本地上下文中),您必须输入一个对象属性(使用 $this->param)或$param像这样在本地定义:

public function myFunction ($product){
    if (is_object($product)) {
        $param = 'color';
        echo $product->getParam($param);
    } else {
        # catch the error / fault
    }
}

一种替代方法是使用返回标量(字符串值或数字)而不是getParam()另一个 getter,即喜欢getColor()并且您不需要 aparam来调用它:

public function myFunction ($product){
    if (is_object($product)) {
        echo $product->getColor();
    } else {
        # catch the error / fault
    }
}

因此,总而言之,您几乎把所有可能做错的事情都做错了。但我认为这是一个很好的演练,展示不同的细节。

于 2018-09-16T15:22:24.353 回答