Ben zaten tanımlanmış bir işlev tanımlamak için çalıştığınızda bir hata atmak için PHP alabilir miyim?

5 Cevap

Ben düzenli olarak bu sorun haline çalıştırın, ve bir yapılandırma sorunu veya PHP ile bir özelliği olmadığını ben anlamaya çalışıyorum.

Temelde, bir yerde benim kodunda tanımlanan bir işlev foo () olacak, ve sonra başka bir yerde ben yanlışlıkla aynı ismi foo () ile tekrar bir işlev tanımlamak olacaktır. Bazı tür bir hata, örneğin atılmış olması beklenir "Önemli Hata: Fonksiyon zaten hattı 234, bar.php filan tanımlanmıştır".

Ama ben bir şey olsun. Ben sadece boş bir ekran olsun. Ben fonksiyon yanlışlıkla bir hata mesajı yardımı olmadan, yeniden ediliyor tam olarak nerede kesin olarak belirlemek için deneyin gibi hata ayıklama bir sonsuzluk alabilir.

Hataları raporlama için benim yapılandırma ayarları E_ALL ayarlanır, ve ben bir aksamadan hataları diğer türlü görüyorsunuz.

Herhangi bir yorumlara? Ben PHP bu hataları bildirmek için neden için yapabileceğiniz bir şey var mı (I kusurlu fonksiyonunu yeniden adlandırmak ya da sarın ya böylece bir if function_exists () yan)?

Edit: Açık olmak gerekirse, ben PHP ad çarpışmaları önlemek için birçok strateji anlıyorum. Ben herhangi bir nedenle ben accidentally Bir fonksiyon zaten gelişimi sırasında var (ya da örneğin bir fonksiyon zaten tanımlanmış olan bir dosyayı içe) bir isim isim örneklerini bahsediyorum. Bu oluştuğunda bana hata ayıklama yardımcı olacağını, bir hata mesajı beklenir, ama ben bir tane alamadım.

5 Cevap

Bir koşullu function_exists() fonksiyonu tanımları kaydırabilirsiniz:

if (!function_exists("file_get_contents"))
 {
   function file_get_contents(....)
     ....
 }

Benim için çalışıyor.

Sen function_exists her işlevin etrafında kontrol ve zaten varsa bir hata mesaj atmak var bir sarın. Ölümcül hataları ekranda görünmüyor neden daha iyi bir yolu ancak dışarı bulmak olacaktır. Eğer phpinfo() error_reporting ve ilgili ayarları kontrol edebilirsiniz?

Bu bir işlevi yeniden tanımlamaya çalışırken alıyorsanız gereken budur:

Fatal error: Cannot redeclare file_get_contents() in D:\xyz\htdocs\test.php on line 5

Benim phpinfo():

display_errors On

error_reporting 22519 (equals. .. iyi, ben bilmiyorum ama bu hataları gösterir :)

Hata raporlama tamamen kapalıydı bazı hosting ortamlarda, çok yararlı bir özel hata işleyicisi tanımlayan bulduk: set_error_handler()

Eğer yerel sunucuda komut hosting var mı? Sana E_ALL kurdum bile, hiç iade edilen herhangi bir PHP hataları önlemek İngiltere merkezli bir hosting şirketi biliyorum.

Bu durumda hata raporlama ile yerel app test düşünün açıksa.

Alternatif olarak, aslında bir fonksiyon function_exists ile zaten orada olup olmadığını kontrol edebilirsiniz.

if (function_exists('foo'))
{
  echo 'foo function exists !!';
}
else
{
  echo 'foo function does not exists !!';
}

Hayatınızı kolaylaştırmak için bazı öneriler:

Ben genellikle benim app boyunca kullanarak olacak benim tüm küresel fonksiyonları saklamak genel fonksiyonları dosya yaratacaktır.

Ben de denemek ve nesne-yönelimli mümkün olduğunca devam edeceğiz. Eğer zaten bir nesne oluştururken eğer PHP hataları verecek ve mantıksal nesnelerin içine fonksiyonları kapsülleştirip daha kolay bir zaman onu korumak gerekir.

Bu, düzgün kodunuzu organize değil gibi görünüyor, size dosyaları dahil ortak bir kitaplık kullanmayı deneyin, ve orada fonksiyonlarını tanımlar. Belki de sadece aynı ada sahip iki işlevi varsa o zaman çarpışmalar olmaz, kullanımları derslere başlamak gerekir.