Netbeans'te (PHP) değişken tür ipuçları


86

Netbeans'te normal değişkenler için tip ipuçları vermenin bir yolu olup olmadığını merak ediyorum, böylece intellisense onu alır. Bunu sınıf özellikleri, fonksiyon parametreleri, dönüş türleri vb. İçin yapabileceğinizi biliyorum, ancak bunu normal değişkenler için nasıl yapacağımı çözemiyorum. Bu, farklı nesne türlerini (bir hizmet bulucu gibi) döndürebilen bir yönteme sahip olduğunuz durumlarda gerçekten yardımcı olacak bir şeydir.

ex gibi bir şey:

/**
 * @var Some_Service $someService
 */
$someService = ServiceLocator::locate('someService');

Daha sonra $ someService kullanıldığında, netbeans, Some_Service sınıfında tanımlanan tüm kullanılabilir yöntemleri sağlar.


1
Bu, üyeler için bir sınıf içinde çalışır, ancak bunu işlevlerde veya prosedür kodunda nasıl yapacağımı bilmiyorum.
David Snabel-Caunt

1
Bunu PHP IDE'lerinde Değişken türü ipucu olarak yeniden adlandırmayı düşünüyorum , çünkü bu tür bir yorum tüm yaygın IDE'lerde (NEtBeans, Eclipse, ...) çalışmalıdır.
shadyyx

Yanıtlar:


187

Tek ihtiyacınız olan tek satır:

/* @var $varName Type_Name */

NetBeans PHP Blogundaki şu makaleye bakın: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

Not: En azından sürüm 8.2'de; Anahtar şu şekilde görünüyor:

  • Tek yıldız işareti ( /*yerine /**).
  • Tipi değişken adından sonra yerleştirmek.
  • Yazım ipucundan önce ve sonra hiçbir şey olmaması (beyaz boşluk dışında, ancak yorum tek satırda olmadığında buna bile izin verilmez).

17
Buradaki anahtar, / ** yerine tek yıldız / * gibi görünüyor. En azından 8.0 sürümünde. Teşekkürler.
Cypher

1
Biz, yani nesne özelliği için kullanım vdoc gerekiyorsa hiç işe değil gibi görünüyor için $this->obj = $serviceLocator->get('obj');kullandığım eğer /* @var $obj Obj */öyle değil iş ...
shadyyx

2
Kullanmanız gereken Bu durumda @shadyyx /** @var Type_Name */bu bkz yazıyı ?
havari

6
Belgeleyeceğiniz vdocdeğişkenin üzerindeki satıra yazabileceğinizi ve ardından vurabileceğinizi Tabve bunun yukarıdaki @johannes yazılarını otomatik olarak belge bloğu oluşturmak için bir makro görevi göreceğini unutmayın.
Tom Auger

1
NetBeans'in alternatif sözdizimlerini de desteklemesini istiyorsanız, lütfen özellik isteğine yorum yapın / oy verin: netbeans.org/bugzilla/show_bug.cgi?id=267470
marcovtwout

24

Bunun daha eski bir soru olduğunu biliyorum, ancak Eclipse / Zend Studio için benzer bir cevap arıyordum ve bu da sorunu çözdü.

** Bu tarzda açıkça açılış ve kapanış ile tek bir satırda olması gerektiğini unutmayın ...

/* @var $varName Type_Name */

Başka format yok ...

/**
 * @var $varName Type_Name
 */ 

veya...

// @var $varName Type_Name

hiç işe yarıyor gibiydi. Umarım bu birine yardımcı olur.


En son listelenen çift eğik çizgi yöntemini kullanmak benim için NetBeans 7.2'de işe yaramadı
David

1
@David O kadar iyi okuyamayabilir ama SADECE ilk çalışmaların olduğunu söyledim. Diğerlerinin ikisi de geçerli yorumlar olsa da, ikisi de tür ipucu sistemi ile çalışmıyor, en azından tutulma olduğu sürece, NetBeans hakkında emin değil.
oucil

1
Netbeans (8.01) sadece / * kullanarak ilk seçeneği kabul eder, ancak phpStorm (8) / ** 'yi de destekler.
Jop van Raaij

9

Bu sinir bozucu sihirli değişkenleri belgelemek mi istiyorsunuz ? (Yaptım; Bu soru şu anda Google'da bunun için en iyi sonucu alıyor. Umarım bu birisine yardımcı olur!)

@propertyEtiket, belge sağlayan sihirli php değişkenleri - bunlar hayata kullanarak __get()ve __set(). Etiket, belgelerde sınıf tanımından hemen önce kullanılmalıdır:

/**
 * Class Contact
 * @property string $firstName
 * @property string $lastName
 */
class Contact extends Model {
   ...

Bu gösterim, Netbeans 8.1 ve PhpStorm 2016.1'de test edilen otomatik tamamlamayı tetikler.

görüntü açıklamasını buraya girin


3

Bu hata raporuna göre , sözdizimi NetBeans 9'da değişecek :

/* @var $variable VarType */    // vdoc1 (legacy syntax)
/** @var VarType $variable */   // vdoc (new syntax)

Ayrıca, []bir nesne dizisini belirtmek için bir sınıf adına ekleyebileceğinizden bahsetmeye değer :

/* @var $foos Foo[] */
$foos = // ...

foreach ($foos as $foo) {
    // $foo will be hinted as Foo here
}

Ve ifadenizi unutmayın use, örneğinuse Foo;


2

Netbeans 8.0.2'de , vdoc şablonu size şunu verir:

/* @var $variable type */

Ancak Netbeans bunu tanımayacak ve nesneleriniz için size doğru otomatik tamamlama listesini vermeyecektir. Bunun yerine, değişken bildiriminizden hemen önce bunu kullanın:

/** @var objectType $varName */

Stok vdoc Şablonu için, özellikle PDO veya PDOStatement nesneleri olarak kullanılacak sınıf değişkenleri için gerçekten harika bir kullanım görmedim .

Kullandığım çözümlerden biri, aslında Araçlar / Seçenekler / Düzenleyici / Kod Şablonlarına (Diliniz olarak PHP seçilerek) gitmek ve yeni bir Şablon eklemek. Benim ipucumu aradım . Ardından Genişletilmiş Metin altında aşağıdaki şablonu kullanın:

/** @var ${VAR_TYPE variableFromNextAssignmentType default="ClassName"} $$${VARIABLE variableFromNextAssignmentName default="variable"} */

3
Hm, NB 8.0.2'ye sahibim ve benim için tam tersi. / * @Var $ değişken türü * / iyi çalışıyor. Yamanızı Şablonlar için kullanmayı denedim. ama işe yaramadı.
userfuser

1
Bu cevabı ilk gönderdiğimde netbeans kopyamda tam olarak ne olduğundan emin değilim, ama şimdi 8.2 kullanıyorum. / * @var $ varName varType * / gayet iyi çalışıyor.
Mike

0

NetBeans IDE 8.2 sözdizimi şu şekildedir:

class foobar{
    /** @var string $myvar: optional description here **/
    protected static $myvar;
}

Bu, en azından statik değişkenler için tür ipuçlarını doğru şekilde sağlayacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.