2009-09-15 20 views

cevap

81

Elbette, sihir sabitlerini istiyorsunuz.

function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; } 

daha fazla the php manual

+32

değişken içeriğini güncellemeyi ve sadece arsızlık için, büyü yöntemi için sihirli sabiti unutmayı unutabilir name is: '__METHOD__' – Anthony

+24

Oyuna geçtiğimizde,' __METHOD__' aslında 'Class :: method' döndürdüğü için şaşırdım. __FUNCTION__' özel olarak sadece metod ismini döndürüyor… RTFM benim gibi değil. – Chords

-4

Bunu neden yapmıyorsunuz?

public function something() { 
    $thisMethodName = "something"; 
} 
+8

__FUNCTION__' kullanılabilir olduğunda tamamen gereksizdir. –

+1

Yeterince adil - ama aynı ruh içinde '__FUNCTION__ gereksizdir' diyebilirim :) –

+4

Yöntem, yeni bir ad alırsa tehlikeli, –

1

hackish öğrenin, ama aynı zamanda muhtemelen debug_backtrace() dönüş değeri dışına kazmak başladı.

19

magic constant "__METHOD __" dosyasını kullanırken, php's reflection numaralı telefonu görüntülemeyi kesinlikle öneririm. Bu PHP5'te desteklenir.

$modelReflector = new ReflectionClass(__CLASS__); 
$method = $modelReflector->getMethod(__METHOD__); 

Ardından imzayı incelemek gibi eşek şeyler tekme yapabiliriz vb

+0

"İmzayı kontrol et" derken, bunu mu kastediyorsunuz? http://www.php.net/manual/en/function.openssl-verify.php –

+0

@MrMe Hayır, bunun gibi bir yöntem imzası (bir kimlik doğrulama imzasıyla karıştırılmamalıdır): http: //en.wikipedia. org/wiki/Type_signature – thesmart

+0

Pekala, bu temelde Tip Hinting http: // stackoverflow.com/questions/2161040/is-method-imz-in-php-a-must-or-olmalıdır Teşekkürler! –

10

smartj bu da sınıf adını içeren bir dize döneceğini sihirli sabit __METHOD__ çalışıyorum, ama hatırlıyorum ileri sürdüğü gibi, yani 'MyClass :: bir şey'. Bunun yerine __FUNCTION__ kullanmak, 'bir şey' döndürecektir. __FUNCTION__ kullanma

2

gitmek yerine yoludur: birkaç şekilde kaynak bir dize olarak yöntem adı depolamak için bir değişken ve bellek ekleyerek ve zaten var neyi çoğaltarak, böylece gereksiz yere ekleyerek kusurludur

public function something() { 
    $thisMethodName = "something"; 
} 

kullanıldı, (bunu birçok yöntemle büyük bir kitaplık için yaparsanız, önemli ölçüde önemlidir).

PHP'deki sihirli sabitlerin değişmemesi garanti edilirken, bu yaklaşım yöntem adı değiştiyse uygulanabilir düzenlemeyi gerektirecektir, dolayısıyla bir tutarsızlık potansiyelini tanıtacaktır (not, potansiyel olarak ifade ettim, basitçe aksi takdirde gereksizdir) Bunun yerine sihirli sabit kullanıldıysa düzenleyin).

Bir değişkeni adlandırmak için harcanan zaman ve çaba, yöntem adını, bu gereksiz değişkene atanan bir dizgeyi yeniden yazın ve elbette değişken adının doğru bir şekilde başvurulmasını sağlayın. Bu, PHP'nin başlangıçta sihirli sabitleri sağlayan motivasyonudur (ve herhangi bir hak talebini reddetmek __FUNCTION__ gereksizdir).

İlgili konular