【问题标题】:Creating an object from a class in Codeigniter从 Codeigniter 中的类创建对象
【发布时间】:2009-10-03 13:00:17
【问题描述】:

以下代码来自http://d.hatena.ne.jp/dix3/20081002/1222899116,代码运行良好。

这是在 codeigniter 中使用snoopy 的示例。

第一季度。我说我不能用对吗?

$this -> load -> library('snoopy')

因为 Snoopy.php 不创建对象。下面的例子是这样做的方法吗? 如果是这样,您能否向我解释/指导我详细说明如何操作的教程或说明?

if ( ! class_exists('Snoopy'))
    {
        require_once(APPPATH.'libraries/Snoopy'.EXT);
    }

第二季度。作者为什么用

$to_specialchars=true

这个需要吗?

第三季度。你能解释一下APPPATH和EXT吗?

APPPATH.'libraries/Snoopy'.EXT

我在 php.net 中检查过,但找不到。 EXT 必须是扩展,但我可以在任何地方使用吗?

提前致谢。

我在 application/library/Snoopy.php 中有一个 snoopy

我有应用程序/库/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 */
 ?>

我有一个控制器 application/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 );
} 


}

我有一个视图,application/view/base_view.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <meta name="keywords" content="keyword here" />
    <meta name="description" content="description here" />
    <title><?php if(isset($page_title)){echo $page_title ;}?></title>
    <?php if(isset($xajax_js)){echo $xajax_js ;}?>
    <link href="http://127.0.0.1/ci_day4/css/mystyle.css" rel="stylesheet" type="text/css"/>
</head>
<body>

<div id="container">


    <div id="rightblock">

        <div id="content">

            <?=$main_content?>

        </div>

    </div>

</div>

</body>
</html>

【问题讨论】:

    标签: php codeigniter snoopy


    【解决方案1】:

    第一季度。您可以使用:

    $this->load->library('snoopy');
    

    在您的控制器中。并像这样创建一个新实例:

    $snooper = new Snoopy();
    

    他们使用的原因:

    if (!class_exists('Snoopy')) {
        require_once(APPPATH.'libraries/Snoopy'.EXT);
    }
    

    是因为如果你尝试使用 $this->load->library(),你会得到一个致命错误,因为加载器类在库中不可用。你可以在控制器中调用它是因为你的控制器扩展了控制器类,它扩展了 ci_base 类,它扩展了 ci_loader 类,这是调用 $this->load 等功能的来源。您在此处显示的 Scraping 类没有。如果您深入研究,您会发现加载器基本上使用 include_once 来包含您尝试使用的任何类、助手等。

    第二季度。

    $to_specialchars = true
    

    在几个函数声明中用作参数。设置它'=true'只是设置一个默认值,所以你可以这样做:

    echo $scrappy->getWebHtml('http://example.com');
    

    与此相同:

    echo $scrappy->getWebHtml('http://example.com', true);
    

    如果您查看该函数的返回语句,您会看到它们正在检查 $to_specialchars,如果为真,则输出首先通过 PHP 函数 htmlspecialchars() 运行。

    第三季度。如果你查看你的 codeigniter 项目的根目录,在 index.php 中你会看到 EXT 定义为:

    define('EXT', '.'.pathinfo(__FILE__, PATHINFO_EXTENSION));
    

    和 APPATH:

    if (is_dir($application_folder))
    {
    define('APPPATH', $application_folder.'/');
    }
    else
    {
        if ($application_folder == '')
        {
            $application_folder = 'application';
        }
        define('APPPATH', BASEPATH.$application_folder.'/');
    }
    

    因此,这是在引导时设置的两个常量,因此您可以在应用程序中使用它们,如果您要更改它们,那么它不会像您在提供的代码中看到的那样使用实例。

    请下次每个 stackoverflow 问题回答一个问题 :)

    【讨论】:

    • 您写道“是因为他们在另一个独立于 codeigniter 的库中使用它”?你怎么知道的?
    • 我试图澄清我在第一季度所说的话。我知道这些事情的原因也是通过阅读代码和尝试的东西。如果你一次只问一个问题,那么给出更彻底的答案比给出一个巨大的答案更容易。希望这有帮助。
    【解决方案2】:

    。此示例抓取代码是基于使用该库编写的: "史努比 - PHP 网络客户端 (snoopy.sourceforge.net)"


    我试图再次发布它。但我无法发布超链接。对不起.. 我会在我的网站上回答这个问题。(我是新手 stackoverflow.com :-( )

    我想我会在几天后尝试重新发布这些答案。

    (http://d.hatena.ne.jp/dix3/20091004)

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 2010-10-12
      • 2017-04-22
      • 2019-08-04
      • 1970-01-01
      相关资源
      最近更新 更多