2010-04-14 13 views
10

PHP 5.2'de statik olmayan bir yöntemde call_user_func kullandığımda Sıkı Uyarı alırım:PHP 5.3'te call_user_func ile statik olmayan yöntemleri aramak tamam mı?

Strict Standards: Non-static method User::register() cannot be called statically 

Ancak PHP 5.3.1'de bu uyarıyı alamıyorum. Bu, PHP 5.3.1'deki bir hata mı, yoksa uyarı kaldırılmış mı?

+0

desteklenen gibi alırsınız PHP5.3'te aynı uyarı. Php5.3 ve php5.2 yapılandırmanızın farklı olduğu anlaşılıyor. "Error_reporting" dosyasına bakın. – vooD

cevap

23

Mükemmel Tamam - ama hangi statik olmayan yöntem denecek nesne göstermek üzere sınıfının bir örneği bir nesneyi geçmek zorunda olduğuna dikkat:

class MyClass { 
    public function hello() { 
     echo "Hello, World!"; 
    } 
} 

$a = new MyClass(); 
call_user_func(array($a, 'hello')); 


You böyle bir şey kullanmamalısınız:

call_user_func('MyClass::hello'); 

size aşağıdaki uyarıyı verecektir Hangi:

Strict standards: `call_user_func()` expects parameter 1 to be a valid callback, 
non-static method `MyClass::hello()` should not be called statically 

(yöntem statik olarak ilan edilmiştir, bu mükemmel iyi çalışacak ... ama burada, değil)


Daha detaylı bilgi için, kılavuzun callback bölümüne bir göz alabilir , bu, diğer şeyler arasında, bildiren (alıntı):

bir örneği nesnenin bir yöntem olup indeksi 0 bir nesne ve yöntem ismi içeren bir dizi olarak geçirilirendeksi 1.


de 210 PHP 5.2 ile sıkı bir hata alıyorum ve PHP 5.3 ile, muhtemelen yapılandırma meselesi ise - Ben error_reporting yönergesi düşünüyorum. E_ALL içermediğini

Not E_STRICT(quoting):

E_ALL: Tüm hatalar ve uyarılar seviyesinin E_STRIC hariç, T.

+1

E_STRICT, PHP 5.3'te E_ALL'a dahil edilmiş olmalıdır. Btw teşekkür ederim, nesneyi örnekledim ve sonra gayet iyi çalışıyor. – sandelius

+0

Nesnenin anlaşılması konusunda sorun yok :-) ;;; E_STRICT'nin PHP 5.3'te bile E_ALL'de yer aldığını sanmıyorum - bu nedenle bu kılavuzda öyle söylenebilir ;-) –

+0

“E_ALL” 5.5'te “E_STRICT” i kesinlikle içerir. –

İlgili konular