将phpUri调用转换为CI库调用
本机PHP中的代码:将phpUri调用转换为CI库调用,php,codeigniter,hyperlink,singleton-methods,Php,Codeigniter,Hyperlink,Singleton Methods,本机PHP中的代码: $href = phpUri::parse($target_url)->join($href); 我在CI中尝试的代码无效: $CI->load->library('Phpuri', array($target_url)); $href = $CI->phpuri->parse($target_url); $href = $CI->phpuri->join($href); 您可以看到phpUri本机库。我刚刚改变了类名rest的
$href = phpUri::parse($target_url)->join($href);
我在CI中尝试的代码无效:
$CI->load->library('Phpuri', array($target_url));
$href = $CI->phpuri->parse($target_url);
$href = $CI->phpuri->join($href);
您可以看到phpUri本机库。我刚刚改变了类名rest的情况,使其在CI中工作。我在另一个库中使用它,因此使用CI实例。CodeIgniter的模式是单例模式。phpUri使用静态调用。它们之间有很大的区别,我建议你熟悉一下 这里的要点是,
phpUri
使用从类请求的静态调用parse
,而不是对象本身,因为CodeIgniter是一个单例,它是一个带有子对象的对象(为了简单起见,请阅读更多相关内容)。话虽如此,但这不起作用的原因是,phpUri
的行为不像对象,只在静态调用后生成(返回)对象:
$href = phpUri::parse($target_url)->join($href);
可简化为:
$parsed = phpUri::parse($target_url);
$href = $parsed->join($href);
第一行是静态调用,它将一个对象返回到$parsed
变量,然后您就可以使用它了
在singleton中,不能通过将类定义为对象属性来创建“类父级”。这就是为什么要使用这个库,首先应该重写所有静态调用
但在CodeIgniter中编写抽象层库要容易得多,它在对象的非静态方法中使用静态调用:
class MyPhpUri {
function parse($target_url) {
return phpUri::parse($target_url);
}
}
然后在你的图书馆里
$CI =& get_instance();
$CI->load->library('MyPhpUri');
$href = $CI->myphpuri->parse($target_url)->join($var);
这就是抽象类的含义——它为您提供了一个接口。CodeIgniter的模式是单例的。phpUri使用静态调用。它们之间有很大的区别,我建议你熟悉一下 这里的要点是,
phpUri
使用从类请求的静态调用parse
,而不是对象本身,因为CodeIgniter是一个单例,它是一个带有子对象的对象(为了简单起见,请阅读更多相关内容)。话虽如此,但这不起作用的原因是,phpUri
的行为不像对象,只在静态调用后生成(返回)对象:
$href = phpUri::parse($target_url)->join($href);
可简化为:
$parsed = phpUri::parse($target_url);
$href = $parsed->join($href);
第一行是静态调用,它将一个对象返回到$parsed
变量,然后您就可以使用它了
在singleton中,不能通过将类定义为对象属性来创建“类父级”。这就是为什么要使用这个库,首先应该重写所有静态调用
但在CodeIgniter中编写抽象层库要容易得多,它在对象的非静态方法中使用静态调用:
class MyPhpUri {
function parse($target_url) {
return phpUri::parse($target_url);
}
}
然后在你的图书馆里
$CI =& get_instance();
$CI->load->library('MyPhpUri');
$href = $CI->myphpuri->parse($target_url)->join($var);
这就是抽象类的含义——它为您提供了一个接口。我应该使用此链接来解决我的问题吗?问题中的第一个代码块就是我要走的路!查看我的更新答案^OK实际上,
$target\u url
将不可用于库。所以我可以这样加载库:$this->load->library('MyPhpUri',$target\uurl)代码>使其在那里可用?另外,我正在另一个库中编写此代码,因此我将使用$CI
而不是$this
。这不是问题,对吧?我已经更新了上面的代码,不,加载库时不需要直接传递$target\u url
,这是无效的,因为您可能希望在一个会话中使用不同的url,而且会变得复杂。将其传递给parse()
方法。我收到以下警告:缺少Phpuri::\uu construct()的参数1,在1099行的C:\wamp\www\codeigniter\system\core\Loader.php中调用,并定义了和此错误:已达到最大函数嵌套级别“100”,正在中止!在第19行的C:\wamp\www\codeigniter\application\libraries\Phpuri.php中
第19行是返回Phpuri::parse($target\u url)
我应该使用此链接来解决我的问题吗?问题中的第一个代码块就是我要走的路!查看我的更新答案^OK实际上,$target\u url
将不可用于库。所以我可以这样加载库:$this->load->library('MyPhpUri',$target\uurl)代码>使其在那里可用?另外,我正在另一个库中编写此代码,因此我将使用$CI
而不是$this
。这不是问题,对吧?我已经更新了上面的代码,不,加载库时不需要直接传递$target\u url
,这是无效的,因为您可能希望在一个会话中使用不同的url,而且会变得复杂。将其传递给parse()
方法。我收到以下警告:缺少Phpuri::\uu construct()的参数1,在1099行的C:\wamp\www\codeigniter\system\core\Loader.php中调用,并定义了和此错误:已达到最大函数嵌套级别“100”,正在中止!在第19行的C:\wamp\www\codeigniter\application\libraries\Phpuri.php中
第19行是返回Phpuri::parse($target\u url)代码>