Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 20:00 10.07.25 
Компютри и Интернет
   >> PHP
*Кратък преглед

Тема Ще ми обясните ли.....нови  
АвторUnit-731 (Нерегистриран)
Публикувано29.12.04 13:30



Въпросът ми е не за решението на даден проблем, а по-скоро за разяснение на това решение. Имам клас, който извилча линковете от дадено url:


<?php
/**
* Extract links from a string, from a file or from a valid url

* EXAMPLE:
*
* [ TO PARSE AN URL ( or if you want, a file ) ]
* $myLinks = &new LinkExtractor(); // create a LinkExtractor Object
* if( $myLinks->parseUrl( "http://www.3site.it/index.php" ) == true ) {
* for( $a = 0, $b = count( $fetchLinks = $myLinks->getLinks() ); $a < $b; $a++ ) {
* echo $fetchLinks[$a]."<br />";
* }
* }
*
*/
class LinkExtractor {

var $linkReg = Array(
"/(?i)<a([^\a]+?)href='([^\a]+?)'/i",
"/(?i)<a([^\a]+?)href=\"([^\a]+?)\"/i",
"/(?i)<a([^\a]+?)href=([^\a]+?)[ |>]/i"
);

function LinkExtractor() {
global $__linkExtractor_linkRecipient;
$__linkExtractor_linkRecipient = Array();
}

function __manageLinkRecipient( $replacement ) {
global $__linkExtractor_linkRecipient;
array_push( $__linkExtractor_linkRecipient, htmlspecialchars( $replacement[2] ) );
}

function __callBackCaller( $st ) {
preg_replace_callback( $this->linkReg, Array( &$this, '__manageLinkRecipient' ),$st );
}

function parseUrl( $url ) {
if( @$fp = fopen( $url, "r" ) ) {
$st = '';
while( $text = fread( $fp, 8192 ) ) {
$st .= $text;
}
fclose( $fp );
$this->__callBackCaller( $st );
return true;
}
return false;
}

function getLinks() {
global $__linkExtractor_linkRecipient;
return $__linkExtractor_linkRecipient;
}
}
?>


Ако може да ми обясните за аргументите на тази функция:
preg_replace_callback( $this->linkReg, Array( &$this, '__manageLinkRecipient' ),$st );

или в частност втория аргумент. Просто ми е напълно неясно с каква цел се подава масив, състоящ се от референция към текущия обект (нали ?) и функция.
Другият въпрос, който имам е защо в доста кодове се използва

foo = &new foo();

Предполагам това връща референция към новосъздадения обект, но не мога да разбера смисъл и каква е разликата като се създаде без &

Мерси много и весели празници !



Тема Re: Ще ми обясните ли.....нови [re: Unit-731]  
Автор Blake (извънземен)
Публикувано29.12.04 15:21



Array( &$this, '__manageLinkRecipient' )
ще рече, че за колбек функция се извиква метода __manageLinkRecipient на обекта ($this) - това по принцип е начина да извикаш юзър-дефайнд функция, която всъщност е метод на обект (използва се не само с preg_replace_callback, ами във всички случаи на извикване на функция/метод, например call_user_func)

Just a genius



Тема Re: Ще ми обясните ли.....нови [re: Unit-731]  
Авторroman (Нерегистриран)
Публикувано29.12.04 17:45



& се използва за да се избегне копиране на обект.
В PHP всяко присвояване прави копиране по стойност.
Ако се напише
$a = new A
първо се създава обект от клас А и после неговото съдържание се копира в $а.
За да се избегне това копиране се пише
$a = &new A
Така на $a се присвоява референция на новосъздадения обект, а не се прави копие.



Тема Re: Ще ми обясните ли.....нови [re: roman]  
АвторUnit-731 (Нерегистриран)
Публикувано29.12.04 18:48



Това означава ли, че ако ми се налага да създам няколко обекта би било грешка да използвам =& при създаването на всеки, защото само ще създам няколко референции към един и същ обект ? Ако правилно съм разбрал това е добре да се използва само за една инстанция ?



Тема Re: Ще ми обясните ли.....нови [re: Unit-731]  
Автор Bълk (по-нов и по-лош)
Публикувано29.12.04 23:23



$a1=new A()
$a2=new A()

$a1!=$a2

$a1=&new A()
$a2=&new A()

$a1===$a2

Moscow, раз-два-три, Moscow, посмотри.


Тема Re: Ще ми обясните ли.....нови [re: Bълk]  
Автор phpGuruАдминистратор (член)
Публикувано30.12.04 00:45



а бе не е баш така :-)

ceco@base ~/tmp
$ cat test.php
<?

class A {}

$a = new A();
$a2 = new A();

var_dump($a === $a2);
var_dump($a == $a2);

$a = & new A();
$a2 = & new A();

var_dump($a === $a2);
var_dump($a == $a2);

echo phpversion();

?>

резултата е

ceco@base ~/tmp
$ php test.php
bool(false)
bool(true)
bool(false)
bool(true)
5.0.3
ceco@base ~/tmp
$ /usr/local/php4/bin/php test.php
bool(true)
bool(true)
bool(true)
bool(true)
4.3.10

т.е. тва което си го написал е вярно само за версия 5 :-)



Тема Re: опа [re: phpGuru]  
Автор phpGuruАдминистратор (член)
Публикувано30.12.04 00:51



даже и при 5-та не е така :-) нещо съм се разсеял :-)



Тема Re: опанови [re: phpGuru]  
Автор Bълk (по-нов и по-лош)
Публикувано30.12.04 07:54



В отговор на:

даже и при 5-та не е така :-) нещо съм се разсеял




питаш ли мен след 5-та бира

Moscow, раз-два-три, Moscow, посмотри.


*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.