【问题标题】:PhP foreach through class instancesPhP foreach 通过类实例
【发布时间】:2018-10-31 15:40:48
【问题描述】:

我想知道这个奇怪的事情:

public function getAllCustomers()
{
    $customers = $this->redis->keys("customer:*");
    foreach ($customers as $value) {
        return new \Customer($this->redis->hget($value,"name"),$this->redis->hget($value,"id"),$this->redis->hget($value,"email"));
    }
}

此方法从我的数据库中返回所有客户。

但如果我尝试遍历所有这些客户:

foreach ($customerController->getAllCustomers() as $customer) {
    var_dump($customer);
}

找不到getName() 方法。 var_dump 返回:

NULL
NULL
NULL

客户类别:

class Customer {
    var $name;
    var $id;
    var $email;

    function __construct($name, $id,$email) {
        $this->name = $name;
        $this->id = $id;
        $this->email = $email;
    }

     /**
     * @return mixed
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * @return mixed
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @return mixed
    */
    public function getEmail()
    {
        return $this->email;
    }

    public function __toString()
    {
       return "";
    }
}

我对@9​​87654326@ 很陌生,不明白为什么我无法访问 Customer 对象的字段。

【问题讨论】:

  • 您能否在 for 循环中的 $customer 上添加 var_dumpprint_r
  • 您在 foreach 循环中返回。所以这个循环只会运行一次
  • 你返回的是一个数组而不是一个对象
  • return array(\Customer(... - 您是否还在这里缺少new?您发布的代码应该只会导致语法错误。
  • 您仍在 foreach 循环内返回,因此只会返回一个客户

标签: php object foreach


【解决方案1】:

您的问题:您没有返回客户数组,而只返回一个。你得到 null 因为你的函数只返回 1 对象 -> 而在 PHP 中,当在对象上使用 foreach 循环时,你会得到他的字段 -> 并且字段确实 notgetName 函数。

解决方案:初始化客户数组,填充它并从函数返回。

 public function getAllCustomers()
{
    $customers = $this->redis->keys("customer:*");
    $customersObjs = array();
    foreach ($customers as $value) {
        $customersObjs[] = new Customer($this->redis->hget($value,"name"),$this->redis->hget($value,"id"),$this->redis->hget($value,"email")));
    }
    return $customersObjs;
}

现在你有了 customersObjs 的数组,你可以循环使用:

foreach ($customerController->getAllCustomers() as $customer) {
    echo $customer->getName();
}

【讨论】:

  • 这解决了我的问题。 @RiggsFolly 这个方法也在 foreach 循环中返回并且它正在工作。
  • "也在 foreach 循环中返回" 不,绝对不是。请花点时间查看这与您所拥有的之间的区别。您可能还想查看 the documentation 以了解 return 的作用。
  • 对不起,我的错误。
【解决方案2】:

解决方案:

public function getAllCustomers()
{
    $customers = $this->redis->keys("customer:*");
    $custumersArray = array();
    foreach ($customers as $value) {
        $custumersArray[] = \Customer($this->redis->hget($value,"name"),$this->redis->hget($value,"email"),$this->redis->hget($value,"id"));
    }
    return $custumersArray;
}

问题是您返回的是单个数组而不是数组列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 2014-11-18
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2018-08-11
    • 1970-01-01
    相关资源
    最近更新 更多