Создание объекта из класса в 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 в приложении / библиотека /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 ответа
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.'/');
}
Итак, это две константы, которые устанавливаются при начальной загрузке, так что вы можете использовать их в своем приложении, и если вы когда-нибудь захотите их изменить, то не будет случаев, когда вы увидите, что они используются в предоставленном вами коде.
В следующий раз, пожалуйста, ответьте на один вопрос на стеке:)
, Этот пример кода Scraping был написан на основе использования библиотеки: "Snoopy - сетевой клиент PHP ( snoopy.sourceforge.net)"
Я попытался опубликовать это снова. но я не мог разместить с гиперссылками. извините.. я отвечу на это на моем сайте.(Я новичок stackru.com:-()
Я думаю, что я постараюсь опубликовать эти ответы через несколько дней.