call_user_func(array($criticalErrorHandler, 'write_critical_error'),
$msg_text, $msg_title, $ex);
Ez eddig olyan szepen mukodott, mint a kisangyal.
<flamethrower>
Nem tudom, mi ez a baromsag, de nem vicces. Es ugye, most arrol ne kezdjunk el flamelni, hogy a PHP az egy szep enterprise ready, kiszamithato fejlesztest koveto nyelv. Masik kedvencemet szinten a heten talaltam. Olvasgatom az egyik, nem is annyira ritkan hasznalt fuggveny dokumentaciojat (sajnos mar nem tudom melyik volt az, de elo fogom keriteni). 5.0.2-ben modositottak az egyik parameter mukodesen. Igazabol a modositas celjaval tokeletesen egyetertek, mert nekem az jo volt. Csak ezt mi a retkes faszomert egy HIBAJAVITO verzioban kell elkovetni? Miert nem az 5.1.0-ban?
Rakjunk mindenhova Linuxot, MySQL-t, meg PHP-t, mert hudefasza openszosz. Jah, csak epp, akik itt annyira istenitik a PHP-t, azok nagy resze jol lathatoan egy sor kodot nem irt meg. Egy programozasi nyelvnek/API-nak inkabb ne legyen par evig uj verzioja, de ha egyszer megjelent, az legyen kobe vesett.
Release early, release often-bol a release often eles felhasznalasra szvsz fassag.
</flamethrower>
////
Szerk: torolve, hulgyeseget irtam
////
Szerk.2: Megvan:
public static function write_critical_error($message, $title, Exception &$ex = null)
helyett:
public static function write_critical_error($message, $title, Exception $ex = null)
Fantasztikus.
- saxus blogja
- A hozzászóláshoz be kell jelentkezni
- 1118 megtekintés
Hozzászólások
Ez azért van, mert az objektum eleve referencia, ezért átadáskor felesleges a &. Ezért az Exception &$ex
kifejezésnek a paraméterlistában semmi értelme (adj át renferenciaként egy objektumot, ami eleve referencia). A PHP 5.3 előtti verziók elnézőek voltak ezzel, a PHP 5.3 már nem, mivel ott szigorodtak a referenciaátadással kapcsoldatos dolgok.
De az ilyet sem lehet már megcsinálni:
function foo($bar) {}
$baz = '';
foo(&$baz);
Továbbá ez is warning-ot generál (ez sok contribnál okoz szép nagy narancssárga (xdebug :) ) warningokat):
function foo(&$bar) {}
foo(1);
- A hozzászóláshoz be kell jelentkezni
En kitartok amellett, hogy ez call_user_func bug.
<?php
error_reporting(E_ALL | E_STRICT);
header('Content-type: text/plain');
function foo($round, &$bar)
{
echo __FUNCTION__.' : '.$round.' : '.gettype($bar)."\n";
}
function baz($round, $bar)
{
echo __FUNCTION__.' : '.$round.' : '.gettype($bar)."\n";
}
class A {}
$foo = 'foo';
$baz = 'baz';
$a = new a();
$b = array();
foo('obj, siman', $a); // OK
$foo('vv', $a); // OK
call_user_func('foo', 'calluserfunc', $a); // Fail
foo('tomb, siman', $b); // OK
$foo('vv', $b); // OK
call_user_func('foo', 'calluserfunc', $b); // Fail
echo "\n";
// Ez midnen tovabbi nelkul megy
baz('obj, siman', $a);
$baz('vv', $a);
call_user_func('baz', 'calluserfunc', $a);
baz('tomb, siman', $b);
call_user_func('baz', 'calluserfunc', $b);
$baz('vv', $b);
// PHP 5.2.6, Windows XP
foo : obj, siman : object
foo : vv : object
foo : calluserfunc : object
foo : tomb, siman : array
foo : vv : array
foo : calluserfunc : array
baz : obj, siman : object
baz : vv : object
baz : calluserfunc : object
baz : tomb, siman : array
baz : calluserfunc : array
baz : vv : array
// PHP 5.3.0, MacOSX
// Szerk: PHP 5.3.2, Windows XP
foo : obj, siman : object
foo : vv : object
Warning: Parameter 2 to foo() expected to be a reference, value given in ...
foo : tomb, siman : array
foo : vv : array
Warning: Parameter 2 to foo() expected to be a reference, value given in ...
baz : obj, siman : object
baz : vv : object
baz : calluserfunc : object
baz : tomb, siman : array
baz : calluserfunc : array
baz : vv : array
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
A call_user_func* nem mindig tud rendesen referenciát átadni, így ahelyett érdemes dinamikus függvényhívást használni:
$func = 'foo';
$foo('dinamikus fuggvenyhivas', $b);
- A hozzászóláshoz be kell jelentkezni
De így is meg tudod-e hívni egy objektum metódusát?
- A hozzászóláshoz be kell jelentkezni
Ezek mukodnek:
$fn : fuggvenynev (string)
$class : osztalynev (string)
$obj : objektumpeldany (object)
$str : valtozonev (string)
$fn();
$obj->$fn();
$$str->fuggveny();
$$str->$fn();
Ezzel szopoka (syntax error), de csak regebbi PHP-kon:
class::$fn();
$class::$fn();
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
De mi az, hogy nem mindig tud? Eddig tudott, most miert nem tud?
Egyebkent a dinamikus fuggvenyhivas egeszen addig jo, mig fuggvenyt, vagy egy objektum metodusat akarom meghivni. Ha egy osztaly statikus metodusat probalom meghivni, akkor rabasztam.
Szerk:
Pontositok:PHP 5.3-tol valoban megy a $classname::function(). Csak azzal en nem vagyok kisegitve meg, mert alapbol 5.2-n kellene mennie, csak jo lenne, ha az 5.3-n is tudnek fejleszteni (nameg, jovoben ugy is kell majd tamogatni). Szoval akkor most ugy allunk, hogy vegre megcsinaltak az 5.2 hianyossagat, ellenben elrontottak az 5.3 call_user_func() -jat. Csodaszep :)
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
A $class::function() az sztem atalakithato lenne ugy is, hogy ne kelljen igy meghivni, sztem ez megoldas kerdese.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni