Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过类实例的PhP foreach_Php_Object_Foreach - Fatal编程技术网

通过类实例的PhP foreach

通过类实例的PhP foreach,php,object,foreach,Php,Object,Foreach,我在想这件奇怪的事: 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"),$t

我在想这件奇怪的事:

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_转储返回:

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 "";
    }
}

我对
PHP
非常陌生,不明白为什么我不能访问Customer对象的字段。

您的问题是:您不返回Customer数组,只返回一个。由于函数只返回1object->而在PHP中,在对象上使用
foreach
循环时,会得到他的字段->而字段不具有
getName
函数,因此会得到null

 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;
}
解决方案:初始化客户数组,填充它并从函数返回

 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();
}

您的问题:您不返回客户数组,只返回一个。由于函数只返回1object->而在PHP中,在对象上使用
foreach
循环时,会得到他的字段->而字段不具有
getName
函数,因此会得到null

 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;
}
解决方案:初始化客户数组,填充它并从函数返回

 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();
}
解决方案:

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;
}
问题是您返回的是单个数组,而不是数组列表。

解决方案:

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;
}

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

能否在for循环中的
$customer
上添加
var\u dump
print\u r
?您返回的是foreach循环。因此,循环将只运行一次,并且您返回的是数组,而不是对象
返回数组(\Customer)(…
-此处是否也缺少新的
代码?您发布的代码只会导致语法错误。您仍在foreach循环中返回,因此将只返回一个客户。您是否可以在for循环中的
$Customer
上添加
var\u dump
print\u r
一个foreach循环。因此该循环只运行一次,并且您返回的是数组,而不是对象
返回数组(\Customer(…
-此处是否也缺少一个
新的
?您发布的代码只会导致语法错误。您仍在foreach循环内返回,因此只返回一个客户。这解决了我的问题。@RiggsFolly此方法也在foreach循环内返回,并且正在工作。“也返回到foreach循环内部“不,绝对不是。请花点时间查看此方法与您所拥有的方法之间的差异。您可能还想查看
return
的确切功能。很抱歉,我犯了错误。这解决了我的问题。@RiggsFolly此方法也在foreach循环内返回,并且正在工作。”。“也在foreach循环中返回”不,绝对不是。请花点时间查看这与您所拥有的之间的差异。您可能还想查看
return
的确切功能。抱歉,我的错误。