Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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
Php 从Codeigniter中的类创建对象_Php_Codeigniter_Snoopy - Fatal编程技术网

Php 从Codeigniter中的类创建对象

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);

以下代码来自,工作正常

这是在codeigniter中使用的一个示例

问题1。我说我不能使用

$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.'/');
}