Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将phpUri调用转换为CI库调用_Php_Codeigniter_Hyperlink_Singleton Methods - Fatal编程技术网

将phpUri调用转换为CI库调用

将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的

本机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的情况,使其在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)