CodeIgniter 的模式是单例。phpUri 使用静态调用。我建议您熟悉它们之间的巨大差异。
这里的重点是phpUri
使用从类请求的静态调用parse
,而不是对象本身,因为 CodeIgniter 是一个单例,它是一个带有子对象的对象(为了简单起见,请阅读更多信息)。话虽如此,这不起作用的原因是它phpUri
的行为不像一个对象,并且只在静态调用之后产生(返回)对象:
$href = phpUri::parse($target_url)->join($href);
可以简化为:
$parsed = phpUri::parse($target_url);
$href = $parsed->join($href);
第一行是静态调用,它将一个对象返回给$parsed
变量,然后你可以使用它。
在单例中,您不能通过将类定义为对象属性来创建“类父级”。这就是为什么要使用这个库,你应该首先重写所有的静态调用。
But it is much easier to write an abstraction layer library in CodeIgniter that uses static calls in it's object's non-static methods:
class MyPhpUri {
function parse($target_url) {
return phpUri::parse($target_url);
}
}
Then in your library
$CI =& get_instance();
$CI->load->library('MyPhpUri');
$href = $CI->myphpuri->parse($target_url)->join($var);
That is what an abstract class is - the one that gives you an interface.