PHP sınıfı yöntemleri bir lider çizgi ile anlaşma nedir?

10 Cevap php

Çeşitli PHP kitaplıkları bakarken bir sürü insan gibi tek bir çizgi ile bazı sınıf yöntemleri, önek tercih ettiklerini fark ettik

public function _foo()

... Yerine ...

public function foo()

Ben sonuçta bu kişisel tercihinize aşağı geldiğini biliyoruz, ama herkes bu alışkanlık nereden geldiğini biraz fikir vardı merak ediyordum.

Benim düşünce "sınıfın dışında bu yöntemi demiyorlar" ima yolu olarak, özel korumalı veya sınıf yöntemleri işaretlenmiş olabilir önce muhtemelen, PHP 4 taşınan ediliyor olmasıdır. Ancak, aynı zamanda belki de ben bilerek yararlanacak bunun arkasında iyi bir mantık olabilir ya da aşina değilim bir yere (dil) çıktığını bana oluştu.

Herhangi bir düşünce, anlayış ve / veya görüşler mutluluk duyacağız.

10 Cevap

Bu Object Oriented PHP (PHP 4) eski kötü gün var. OO bu uygulama oldukça kötü oldu, ve özel yöntemleri gibi şeyler içermiyordu. Dengelemek için, PHP geliştiricilerin bir çizgi ile özel olması amaçlanmıştır yöntemleri prefaced. Bazı eski sınıflarında size /**private*/ __foo() { bazı ekstra kilo vermek görürsünüz.

Ben çizgi ile tüm yöntemleri prefacing geliştiriciler duymadım, bu yüzden bu nedenleri ne anlatmaya başlamak olamaz.

I believe the most authoritative source for these kinds of conventions for PHP right now would be the Zend Framework coding convention: http://framework.zend.com/manual/en/coding-standard.naming-conventions.html#coding-standard.naming-conventions.functions-and-methods

methods "private" veya "protected" değiştirici, yöntem adı ilk karakteri bir {[(3 olmalı ile bildirilen nesneler üzerinde İçin )]}. Bu yöntemin adı altçizgi tek kabul edilebilir bir uygulamadır. Yöntemler "kamusal" bir çizgi içeren asla ilan etti.

SNIP

instance variables "private" veya "protected" değiştirici ile beyan olduğu için, değişken adının ilk karakteri bir {[(3)] olmalıdır }. Bu bir değişken adı bir alt çizgi tek kabul edilebilir bir uygulamadır. Üye değişkenler "kamusal" bir çizgi ile başlar asla ilan etti.

Ön alt çizgi vardır generally used for private properties and methods. Ben değil genelde istihdam, ancak bazı programcılar arasında popüler olmaya devam etmez bir tekniktir.

Şimdi, 2013 yılında, bu "officially" bad style PSR-2 kodlama kılavuz tarafından:

Özellik adları korumalı veya özel görüş belirtmek için bir tek çizgi ile öneki OLMAMALI `

Source: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md

Ben orijinal varsayım doğru olduğuna inanıyorum, ben bu "nesne" Özel tutulması içindir vb yöntemler / üyelerine bir çizgi öneki için bazı diller için ortak bir uygulama olarak bulduk. Yapabilirsiniz, ancak söylemek için sadece görsel bir şekilde, bu çağrı olmamalı!

Ben özel yöntemleri için yazmak PHP 5 sınıfında altını bir lider kullanın. Belirli bir sınıf üyesi özel bir geliştirici için küçük bir görsel işaret bulunuyor. Sizin için, kamu ve özel üye ayıran bir IDE kullanırken dayatarak bu tür olarak kullanışlı değildir. Benim C # gün onu aldım. Eski alışkanlıklar ...

I know it from python, where prefixing your variables with an underscore causes the compiler to translate some random sequence of letters and numbers in front of the actual variable name. This means that any attempt to access the variable from outside the class would result in a "variable undefined" error.

Bu hala Python kullanmak için kongre ise ben bile bilmiyorum

Bunu için özel / protected anahtar sözcüğünü kullanabilir ve IDE sizin için işaretler beri çizgi ile özel / korumalı yöntemleri prefixing şiddetle karşı idi.

Ve ben hala, ama, ben iyi bir uygulama olabilir neden bir sebep buldum. Eğer kamu yöntemi addFoo() var ve bu yöntem içinde sen ... Şimdi diğer yöntemlere addFooWhenBar(), addFooWhenBaz() ile ortak olduğu görevin bir kısmını, en iyi olduğunu düşünün addFoo() olurdu, ama o zaten alınır yaygın yöntem için isim, yani addFooInternal() veya addFooCommon() ya da benzeri bazı çirkin ad ile gelmelidir ... ama _addFoo() özel yöntem en iyi biri gibi görünüyor.

Drupal (bir php CMS) alt çizgiler çağrıldığını kanca önlemek için kullanılabilir (https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7).

Ben "my_module" adlı bir modüle sahip ve fonksiyonu hook_insert üzerinde "kanca" verecek bir işlev my_module_insert adlandırmak istiyorsanız. Ben _my_module_insert benim fonksiyonunu yeniden adlandırabilirsiniz bunu önlemek için.

ps The way hooks works in Drupal it's possible to implement a hook by mistake, which is very bad.

Onlar denir "magic methods".