Php 调用函数内部的对象
所以我不会在PHP中进行OOP 这是我的问题,我有一个可以调用函数的对象,它提供了一个数组。这是代码Php 调用函数内部的对象,php,oop,function,Php,Oop,Function,所以我不会在PHP中进行OOP 这是我的问题,我有一个可以调用函数的对象,它提供了一个数组。这是代码 $obj = new OBJ(); function go($url){ $array = $obj->grabArray($url); echo $array['hits']; } go('http://www.mysite.com/hello'); 这给了我一个错误 致命错误:对非对象调用成员函数grabArray()这不是OOP问题,而是范围问题$obj在函数g
$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'];
}
不推荐的方式
$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'];
}
还有另一种解决方案类似于面向对象的组合概念——让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实例的情况下才有用——如果在其他地方使用,那么参数方法是最佳选择
这一切都是关于为手头的任务选择正确的解决方案