本机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本地库here。我刚刚更改了类名休息的情况是相同的,以使其在CI中工作。我在另一个库中使用它,所以使用CI实例。
答案 0 :(得分:1)
CodeIgniter的模式是单身。 phpUri使用静态调用。我建议你们熟悉它们之间有很大的不同。
这里的要点是phpUri
使用从类中请求的静态调用parse
,而不是对象本身,而CodeIgniter是一个单例,它是一个带有子对象的对象(表示为简单起见,请阅读更多相关内容)。说到这一点,之所以不起作用的原因是phpUri
不像对象那样表现,只在静态调用之后产生(返回)对象:
$href = phpUri::parse($target_url)->join($href);
可以简化为:
$parsed = phpUri::parse($target_url);
$href = $parsed->join($href);
第一行是静态调用,它将一个对象返回到$parsed
变量,然后你可以使用它。
在单例中,您不能通过将类定义为对象属性来创建“类父类”。这就是使用这个库的原因,你应该先重写所有的静态调用。
但是在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);
这就是抽象类 - 给你一个接口的那个。