2010-10-13 31 views
7

basename()'un 100-1000sn kullanıldığı bir komut dosyası var, yalnızca işlevlerin tüm betiklerde başka bir şeye değiştirilmesi yerine işlevi geçersiz kılabileceğini düşünüyordum.Varsayılan php işlevini geçersiz kılma

basename() ile ilgili sorun, yabancı dillerdeki dosya adlarıyla iyi çalışmadığıdır. Ben php sitesi http://php.net/manual/en/function.override-function.php bir tane buldum ama PECL başka bir alternatif ihtiyacı var?

+4

İlgili bir notta, eğer iyi çalışmıyorsa, http://bugs.php.net/ – Artefacto

+0

@Artefacto adresinden bir hata raporu gönderin, Bazen geriye dönük uyum sorunları nedeniyle bunu değiştiremezler. – Pacerier

cevap

7
Sen varolan işlev adlarını geçersiz kılmak için ad alanlarını kullanabilirsiniz

:

namespace blarg; 
function basename() { 
    return 'whatever'; 
} 
$base = basename(); 

Yani, basename için herhangi bir çağrı() blarg ad alanı içinde, işlevin yeni sürümünü kullanacaktır.

+3

Ad alanlarının yalnızca PHP 5.3 ve sonraki sürümlerinde desteklendiğini unutmayın. – BoltClock

+0

Bir işlevi başka bir şekilde geçersiz kılmaya çalışmak, bir 'işlev zaten var' hatasına neden olur. Eksiklik 5.3: gerçek basename işlevini, ansi olmayan karakterleri işlemek için başka bir yöntemle birlikte kapsülleyen bir 'xbasename()' işlevi oluşturun. Sonra, CTRL-A & CTRL-H ... Eminim herkes kalanını biliyordur. –

+0

bazen uygulamanın orijinal işlevini çağırmak için gereksinimlerini geçersiz kılar. Bu örnekte, orijinal basename'i yeni basename'den çağırmanın bir yolu var mı? –

1

Sen basename çağırmadan önce yerel ayarını değiştirebilirsiniz:

setlocale(LC_ALL, 'en_US.UTF8'); 

setlocale

2

Bir alternatif runkit olacaktır. Ancak çoğu sunucuda etkin olması olası değildir.

İlgili konular