Создание объекта из класса в Codeigniter

Следующие коды из 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 */ ?> 

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

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

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

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


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

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

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