通过类实例的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
的确切功能。抱歉,我的错误。