[英]php: call a method of an object coming from an array
我试图找出一种方法来调用来自 class B 中的成员数组的指定成员(A 类)的方法。
<?php
class A
{
public function do_something()
{
echo "class A did something";
}
}
class B
{
private $arr = array();
private $current_index = 0;
public function add_new_A()
{
$new_a = new A;
array_push($this->arr, (object) [
$this->current_index => $new_a
]);
$this->current_index++;
}
public function get_an_A_by_index($index)
{
return $this->arr{$index};
}
public function do_something_with_A_member_inside_array($index)
{
self::get_an_A_by_index($index)->do_someting();
}
}
$b = new B;
$b->add_new_a();
$b->add_new_a();
echo print_r($b->get_an_A_by_index(0));
echo "\n";
$b->do_something_with_A_member_inside_array(0); // returns error
// console:
// stdClass Object ( [0] => A Object ( ))
// Uncaught Error: Call to undefined method stdClass::do_something();
?>
总结一下,我想知道我的方法是否被认为是不好的和/或我是否可以采取一些措施来修复错误。 在您不同意我的代码之前,请查看我实际正在处理的 php 代码。 这就是我的问题。
现在说说我为什么要在里面调用一个成员 A 的方法。 对于我的任务,我想要一个使用 class a 的方法 do_something 单独执行某些操作的程序。 到目前为止,唯一的方法是存储 A 的单独成员。
我不确定我是否接近这个错误,因为我来自 Java。 所以,我想出的第一件事就是上面显示的方法。 当我在 Java 中执行此操作时,它工作正常。 但是 php 与 Java 不同,我仍在学习 php 是如何工作的,因为我是新手。
您的代码并不遥远,您只是在构建A
对象集合的方式上遇到了问题。
array_push($this->arr, (object) [
$this->current_index => $new_a
]);
这是创建一个数据结构,我很确定这不是您所期望的。 你最终会得到一个充满 stdClass 对象的数组,每个对象都有一个A
成员和它自己的内部索引:
Array
(
[0] => stdClass Object
(
[0] => A Object
(
)
)
)
然后,您正在检索 stdClass object 并尝试在其上运行该方法,因此您会看到Call to undefined method stdClass::do_something...错误。
相反,您需要做的就是:
$this->arr[$this->current_index] = $new_a;
您的代码的 rest 只需要一个A
对象数组,没有更深的嵌套。
我在这里放了一个完整的例子: https://3v4l.org/ijvQa 。 您现有的代码还有其他几个错别字,这些错别字也已修复。 如果您打开错误报告,您将很容易发现它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.