Создание объекта из класса в Codeigniter - PullRequest
3 голосов
/ 03 октября 2009

Следующие коды взяты из http://d.hatena.ne.jp/dix3/20081002/1222899116, и коды работают хорошо.

Это пример использования snoopy в codeigniter.

Q1. Правильно ли сказать, что я не могу использовать,

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

поскольку Snoopy.php не создает объект. А пример ниже это способ сделать это? Если да, можете ли вы объяснить / направить мне учебное пособие или объяснение того, как это сделать, подробно?

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

Q2. Почему автор использует

$to_specialchars=true

Это нужно для этого?

Q3. Не могли бы вы объяснить APPPATH и EXT.

APPPATH.'libraries/Snoopy'.EXT

Я проверил это на php.net, но не смог найти. EXT должен быть расширением, но я могу использовать где-нибудь?

Заранее спасибо.

У меня есть snoopy в приложении / library / Snoopy.php

У меня есть приложение / библиотека / 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 );
} 


}

И у меня есть представление, 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>

Ответы [ 2 ]

16 голосов
/ 03 октября 2009

Q1. Вы можете использовать:

$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 для включения любого класса, помощника и т. Д., Которые вы пытаетесь использовать.

Q2.

$to_specialchars = true

используется в паре объявлений функций в качестве параметров. Установка его = = true просто установка по умолчанию, так что вы можете сделать это:

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

Что идентично этому:

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

Если вы посмотрите на оператор return этой функции, то увидите, что проверяется, что $ to_specialchars проверяется, и если оно истинно, то вывод сначала выполняется через PHP-функцию htmlspecialchars ().

Q3. Если вы посмотрите на корень вашего проекта 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:)

0 голосов
/ 04 октября 2009

. Этот пример кода Scraping был написан на основе использования библиотеки: «Snoopy - сетевой клиент PHP (snoopy.sourceforge.net)»


Я попытался опубликовать это снова. но я не мог разместить с гиперссылками. извиняюсь.. Я отвечу на это на своем сайте. (Я новичок stackoverflow.com :-()

Я думаю, что постараюсь опубликовать эти ответы через несколько дней.

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

...