所以我不会在 PHP 中进行 OOP。
这是我的问题,我有一个对象,我可以从中调用函数,并且它返回一个数组。这是代码。
$obj = new OBJ();
function go($url){
$array = $obj->grabArray($url);
echo $array['hits'];
}
go('http://www.mysite.com/hello');
这给了我错误
致命错误:在非对象上调用成员函数grabArray()
这不是 OOP 问题,而是范围问题。 $obj 在函数 go() 中不可见。您要么需要将其作为参数传递,要么使用 global 关键字将其带入函数的作用域(不推荐)
推荐方式
$obj = new OBJ();
go('http://www.mysite.com/hello', $obj);
function go( $url, $object )
{
$array = $object->grabArray($url);
echo $array['hits'];
}
不推荐的方式
$obj = new OBJ();
go('http://www.mysite.com/hello');
function go( $url )
{
global $obj;
$array = $object->grabArray($url);
echo $array['hits'];
}
还有另一个类似于 OOP 组合概念的解决方案 - 您可以让 go() 函数负责创建 OBJ 实例。
go('http://www.mysite.com/hello');
function go( $url )
{
$obj = new OBJ();
$array = $obj->grabArray($url);
echo $array['hits'];
}
但这可能并不理想,因为每次执行 go() 时都会创建一个全新的 OBJ 实例。您可以通过使用静态变量“缓存” go() 内的 OBJ 实例来解决此问题
function go( $url )
{
static $obj;
if ( is_null( $obj ) )
{
$obj = new OBJ();
}
$array = $obj->grabArray($url);
echo $array['hits'];
}
但是,这种类似于组合的方法实际上只有在除了 go() 函数内部之外的其他任何地方都不使用 OBJ 实例时才有用 - 如果您在其他地方使用它,那么参数方法是最佳选择。
这一切都是为了为手头的任务选择正确的解决方案!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)