2009-10-03 3 views
2

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

Это пример использования 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.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 */ 
?> 

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


} 

И у меня есть мнение, приложение/просмотр/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> 

ответ

15

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

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

В ваших контроллерах. И создать новый экземпляр так:

$snooper = new Snoopy(); 

Причина, которую они используют:

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

Это потому, что вы получите фатальную ошибку, если вы пытаетесь использовать $ this-> load-> библиотека (), так как класс загрузчика недоступен в библиотеке. Вы можете вызвать его в контроллере, потому что ваши контроллеры расширяют класс контроллера, который расширяет класс ci_base, который расширяет класс ci_loader, в котором возникает функциональность для совершения вызовов, таких как $ this-> load. Класс Scraping, который вы здесь показали, не работает. Если вы выкапываете, вы увидите, что загрузчик в основном использует include_once для включения любого класса, помощника и т. Д., Которые вы пытаетесь использовать.

Q2.

$to_specialchars = true 

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

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

который идентичен этому:

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

Если вы посмотрите на оператора возврата этой функции, вы увидите, что они проверены на $ 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

Вы писали: «Является ли это потому, что они используют его в другой библиотеке, не зависящей от codeigniter»? Как вы это знаете? – shin

+1

Я попытался прояснить, что я сказал в Q1. Также причина, по которой я знаю эти все происходит через чтение кода и попытку. Если вы задаете один вопрос одновременно, вам легче дать более полный ответ, чем один гигантский ответ. Надеюсь, это помогло. –

0

. Этот образец Зачистка код был написан на основе использования библиотеки: «Снупи - чистый клиент PHP (snoopy.sourceforge.net)»


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

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

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