gpt4 book ai didi

php - 在函数内部调用对象

转载 作者:可可西里 更新时间:2023-11-01 13:02:31 26 4
gpt4 key购买 nike

所以我不会在 PHP 中进行 OOP。

这是我的问题,我有一个可以从中调用函数的对象,它返回一个数组。所以这是代码。

$obj = new OBJ();

function go($url){
$array = $obj->grabArray($url);
echo $array['hits'];
}

go('http://www.mysite.com/hello');

这给了我错误

fatal error :在非对象上调用成员函数 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 实例的情况下才有用——如果您确实在其他地方使用它,那么参数方法是最佳选择。

关键在于为手头的任务选择正确的解决方案!

关于php - 在函数内部调用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/889848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com