Php 从Codeigniter中的类创建对象
以下代码来自,工作正常 这是在codeigniter中使用的一个示例 问题1。我说我不能使用Php 从Codeigniter中的类创建对象,php,codeigniter,snoopy,Php,Codeigniter,Snoopy,以下代码来自,工作正常 这是在codeigniter中使用的一个示例 问题1。我说我不能使用 $this -> load -> library('snoopy') 因为Snoopy.php不创建对象。下面的例子是如何做到这一点的? 如果是这样的话,你能给我解释/指导一个关于如何做的详细教程或解释吗 if ( ! class_exists('Snoopy')) { require_once(APPPATH.'libraries/Snoopy'.EXT);
$this -> load -> library('snoopy')
因为Snoopy.php不创建对象。下面的例子是如何做到这一点的?
如果是这样的话,你能给我解释/指导一个关于如何做的详细教程或解释吗
if ( ! class_exists('Snoopy'))
{
require_once(APPPATH.'libraries/Snoopy'.EXT);
}
问题2。作者为什么使用
$to_specialchars=true
这需要它吗
第三季度。你能解释一下APPPATH和EXT吗
APPPATH.'libraries/Snoopy'.EXT
我在php.net中查看了它,但找不到它。分机必须是分机,但我可以在任何地方使用吗
提前谢谢
我在application/library/snoopy.php中有一个snoopy
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Scraping{
var $c;
function Scraping(){
if ( ! class_exists('Snoopy'))
{
require_once(APPPATH.'libraries/Snoopy'.EXT);
}
$this -> c = new Snoopy();
}
function getWebHtml($url="",$to_specialchars=true){
$this ->c -> fetch( $url );
$str = mb_convert_encoding( (string) $this -> c -> results,"UTF-8","auto");
return ($to_specialchars) ? htmlspecialchars($str , ENT_QUOTES , "UTF-8" ) : $str ;
}
function getWebText($url="",$to_specialchars=true){
$this -> c -> fetchtext( $url );
$str = mb_convert_encoding( (string) $this -> c -> results,"UTF-8","auto");
return ($to_specialchars) ? htmlspecialchars($str , ENT_QUOTES , "UTF-8" ) : $str ;
}
function getWebLinks($url=""){
$this -> c -> fetchlinks( $url );
return (array) $this-> c -> results ;
}
function getWebLinksText($url="",$delimiter="<br>"){
$arr = $this-> getWebLinks($url) ;
$ret ="";
foreach($arr as $k => $v){
$ret .= $v . $delimiter ;
}
return $ret;
}
} //endofclass
/* End of file Scraping.php */
/* Location: ./application/libraries/Scraping.php */
?>
我有application/library/Snoopy.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Scraping{
var $c;
function Scraping(){
if ( ! class_exists('Snoopy'))
{
require_once(APPPATH.'libraries/Snoopy'.EXT);
}
$this -> c = new Snoopy();
}
function getWebHtml($url="",$to_specialchars=true){
$this ->c -> fetch( $url );
$str = mb_convert_encoding( (string) $this -> c -> results,"UTF-8","auto");
return ($to_specialchars) ? htmlspecialchars($str , ENT_QUOTES , "UTF-8" ) : $str ;
}
function getWebText($url="",$to_specialchars=true){
$this -> c -> fetchtext( $url );
$str = mb_convert_encoding( (string) $this -> c -> results,"UTF-8","auto");
return ($to_specialchars) ? htmlspecialchars($str , ENT_QUOTES , "UTF-8" ) : $str ;
}
function getWebLinks($url=""){
$this -> c -> fetchlinks( $url );
return (array) $this-> c -> results ;
}
function getWebLinksText($url="",$delimiter="<br>"){
$arr = $this-> getWebLinks($url) ;
$ret ="";
foreach($arr as $k => $v){
$ret .= $v . $delimiter ;
}
return $ret;
}
} //endofclass
/* End of file Scraping.php */
/* Location: ./application/libraries/Scraping.php */
?>
我有一个控制器应用程序/controller/mytasklist.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Mytasklist extends Controller {
function Mytasklist()
{
parent :: Controller();
$this -> load -> helper( 'url' );
}
function index()
{
$data = "";
$this -> _SetTpl( $data );
}
function _SetTpl( $data )
{
$this -> load -> library("scraping");
$data["scraping"]["text"] = $this-> scraping -> getWebText("http://www.example.com/");
$data["scraping"]["html"] = $this-> scraping -> getWebHtml("http://www.example.com/");
$data["scraping"]["link"] = $this-> scraping -> getWebLinksText("http://www.example.com/","\n");
$tpl["page_title"] = "Welcome";
$tpl["main_content"] = $this -> load -> view( 'tasklist_view', $data , true );
$this -> load -> view( 'base_view', $tpl );
}
}
Q1。您可以使用:
$this->load->library('snoopy');
在控制器中。并创建一个新实例,如下所示:
$snooper = new Snoopy();
他们使用的原因:
if (!class_exists('Snoopy')) {
require_once(APPPATH.'libraries/Snoopy'.EXT);
}
这是因为如果尝试使用$this->load->library(),将出现致命错误,因为库中没有loader类。您可以在控制器中调用它是因为您的控制器扩展了控制器类,它扩展了ci_基类,它扩展了ci_加载器类,这是调用$this->load之类的功能的来源。这里显示的Scraping类没有。如果你深入研究,你会发现加载器基本上只使用了一次include\u来包含你试图使用的任何类、助手等
问题2
在函数声明中作为参数使用。设置它“=true”只是设置默认值,因此您可以执行以下操作:
echo $scrappy->getWebHtml('http://example.com');
与此相同:
echo $scrappy->getWebHtml('http://example.com', true);
如果您查看该函数的return语句,您将看到它们是$to_specialchars,如果它是真的,则首先通过PHP函数htmlspecialchars()运行输出
第三季度。如果查看codeigniter项目的根目录,在index.php中会看到定义为以下内容的EXT:
define('EXT', '.'.pathinfo(__FILE__, PATHINFO_EXTENSION));
和阿巴斯:
if (is_dir($application_folder))
{
define('APPPATH', $application_folder.'/');
}
else
{
if ($application_folder == '')
{
$application_folder = 'application';
}
define('APPPATH', BASEPATH.$application_folder.'/');
}
这是在引导时设置的两个常量,因此您可以在应用程序中使用它们,如果您要更改它们,那么在您提供的代码中使用它们的情况就不一样了
下次请对每个stackoverflow问题提出一个问题:)。此示例刮取代码是基于使用库编写的: “Snoopy-PHP网络客户端(Snoopy.sourceforge.net)”
我试着再发一次。但我无法发布超链接。很抱歉 我会在我的网站上回答这个问题 我想几天后我会尝试转载这些答案
()您写道“是因为他们在另一个独立于codeigniter的库中使用它”?你是怎么知道的?我试图澄清我在第1季度所说的。我知道这些事情的原因也是通过阅读代码和尝试一些东西。如果你一次问一个问题,那么给出更全面的答案比给出一个巨大的答案更容易。希望这有所帮助。
if (is_dir($application_folder))
{
define('APPPATH', $application_folder.'/');
}
else
{
if ($application_folder == '')
{
$application_folder = 'application';
}
define('APPPATH', BASEPATH.$application_folder.'/');
}