คำแนะนำประเภทตัวแปรใน Netbeans (PHP)


86

แค่อยากรู้ว่ามีวิธีใน netbeans ที่จะให้คำแนะนำประเภทสำหรับตัวแปรปกติหรือไม่เพื่อให้ intellisense หยิบมันขึ้นมา ฉันรู้ว่าคุณสามารถทำได้สำหรับคุณสมบัติคลาสพารามิเตอร์ฟังก์ชันประเภทการส่งคืน ฯลฯ แต่ฉันคิดไม่ออกว่าจะทำอย่างไรกับตัวแปรปกติ เป็นสิ่งที่จะช่วยได้มากในสถานการณ์ที่คุณมีเมธอดที่สามารถส่งคืนอ็อบเจ็กต์ประเภทต่างๆ (เช่นตัวระบุตำแหน่งบริการ)

เช่น:

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

ในกรณีที่ใช้ $ someService หลังจากนั้น netbeans จะจัดเตรียมวิธีการที่มีอยู่ทั้งหมดที่กำหนดไว้ในคลาส Some_Service


1
สิ่งนี้ใช้ได้ในคลาสสำหรับสมาชิก แต่ฉันไม่รู้ว่าจะทำอย่างไรในฟังก์ชันหรือโค้ดขั้นตอน
David Snabel-Caunt

1
ฉันคิดว่าจะเปลี่ยนชื่อสิ่งนี้เป็นVariable type hinting ใน PHP IDEsเนื่องจากความคิดเห็นประเภทนี้ควรใช้ได้กับ IDE ทั่วไปทั้งหมด (NEtBeans, Eclipse, ... )
Shadyyx

คำตอบ:


187

บรรทัดเดียวคือสิ่งที่คุณต้องการ:

/* @var $varName Type_Name */

ดูบทความนี้ในบล็อก PHP ของ NetBeans: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

หมายเหตุ: อย่างน้อยในเวอร์ชัน 8.2; คีย์น่าจะเป็น:

  • เครื่องหมายดอกจันเดียว ( /*แทน/**)
  • การวางประเภทไว้หลังชื่อตัวแปร
  • ไม่มีอะไรเลยก่อนและหลังการบอกใบ้ประเภท (ยกเว้นเว้นวรรคสีขาว แต่ก็ไม่ได้รับอนุญาตเมื่อความคิดเห็นไม่อยู่ในบรรทัดเดียว)

17
คีย์ที่นี่ดูเหมือนจะเป็นเครื่องหมายดอกจันตัวเดียว / * แทนที่จะเป็น / ** อย่างน้อยในเวอร์ชัน 8.0 ขอบคุณ.
Cypher

1
ดูเหมือนจะไม่ทำงานเลยถ้าเราจำเป็นต้องใช้ vdoc สำหรับคุณสมบัติของวัตถุเช่น$this->obj = $serviceLocator->get('obj');ถ้าฉันใช้/* @var $obj Obj */มันไม่ได้ผล ...
Shadyyx

2
@shadyyx ในกรณีนี้คุณควรใช้/** @var Type_Name */ดูโพสต์นี้?
Apostle

6
โปรดจำไว้ว่าคุณสามารถพิมพ์vdocบนบรรทัดเหนือตัวแปรที่คุณกำลังจะจัดทำเอกสารจากนั้นกดTabและจะทำหน้าที่เป็นมาโครเพื่อสร้างโพสต์ doc block @johannes ด้านบนโดยอัตโนมัติ
Tom Auger

1
หากคุณต้องการให้ NetBeans สนับสนุนไวยากรณ์ทางเลือกด้วยโปรดแสดงความคิดเห็น / ลงคะแนนในคำขอคุณสมบัติ: netbeans.org/bugzilla/show_bug.cgi?id=267470
marcovtwout

24

ฉันรู้ว่านี่เป็นคำถามที่เก่ากว่า แต่ฉันกำลังมองหาคำตอบที่คล้ายกันสำหรับ Eclipse / Zend Studio และสิ่งนี้ก็แก้ไขได้เช่นกัน

** โปรดทราบว่าต้องอยู่ในบรรทัดเดียวโดยมีการเปิดและปิดอย่างชัดเจนในลักษณะนี้ ...

/* @var $varName Type_Name */

ไม่มีรูปแบบอื่นไม่ว่า ...

/**
 * @var $varName Type_Name
 */ 

หรือ...

// @var $varName Type_Name

ดูเหมือนจะได้ผลเลย หวังว่าจะช่วยใครบางคน


การใช้วิธี double slash ที่ระบุไว้ล่าสุดไม่ได้ผลสำหรับฉันใน NetBeans 7.2
David

1
@David มันอาจจะอ่านไม่ดี แต่ฉันบอกว่าเป็นผลงานแรกเท่านั้น แม้ว่าทั้งสองข้อจะเป็นความคิดเห็นที่ถูกต้อง แต่ก็ไม่ได้ทำงานกับระบบการบอกใบ้ประเภทอย่างน้อยที่สุดเท่าที่คราสจะดำเนินไปไม่แน่ใจเกี่ยวกับ NetBeans
oucil

1
Netbeans (8.01) ยอมรับเฉพาะตัวเลือกแรกโดยใช้ / * แต่ phpStorm (8) รองรับ / ** เช่นกัน
Jop van Raaij

9

คุณต้องการบันทึกตัวแปรเวทมนตร์ที่น่ารำคาญเหล่านั้นหรือไม่? (ฉันตอบคำถามนี้อยู่ในอันดับต้น ๆ ของผลลัพธ์ใน Google ฉันหวังว่านี่จะช่วยใครบางคนได้!)

@propertyแท็กช่วยให้คุณสามารถเอกสารมายากลตัวแปร PHP - ผู้ดำเนินการใช้และ__get() __set()ควรใช้แท็กในเอกสารที่นำหน้านิยามคลาสทันที:

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

สัญกรณ์นี้ทริกเกอร์การเติมข้อความอัตโนมัติทดสอบใน Netbeans 8.1 และ PhpStorm 2016.1

ใส่คำอธิบายภาพที่นี่


3

ตามรายงานข้อผิดพลาดนี้ไวยากรณ์จะเปลี่ยนไปในNetBeans 9 :

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

นอกจากนี้คุณควรต่อท้าย[]ชื่อคลาสเพื่อระบุอาร์เรย์ของวัตถุ:

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

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

และอย่าลืมuseคำพูดของคุณเช่นuse Foo;


2

ใน netbeans 8.0.2 เทมเพลตvdocให้สิ่งนี้แก่คุณ:

/* @var $variable type */

อย่างไรก็ตาม Netbeans จะไม่รู้จักสิ่งนี้และจะไม่ให้รายการเติมข้อความอัตโนมัติที่ถูกต้องสำหรับวัตถุของคุณ แทนที่จะใช้สิ่งนี้ก่อนการประกาศตัวแปรของคุณ:

/** @var objectType $varName */

ฉันไม่เคยเห็นการใช้งานที่ยอดเยี่ยมสำหรับสต็อกvdoc Template โดยเฉพาะอย่างยิ่งสำหรับตัวแปรคลาสที่จะใช้เป็นวัตถุ PDO หรือ PDOStatement

วิธีแก้ปัญหาหนึ่งที่ฉันใช้คือไปที่ Tools / Options / Editor / Code Templates (โดยเลือก PHP เป็นภาษาของคุณ) และเพิ่ม Template ใหม่ ผมเรียกว่าเหมืองแบะท่า จากนั้นภายใต้ข้อความที่ขยายให้ใช้เทมเพลตต่อไปนี้:

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

3
อืมฉันมี NB 8.0.2 และสำหรับฉันแล้วมันเป็นวิธีอื่น ชนิดตัวแปร / * @var $ * / ทำงานได้ดี ฉันพยายามใช้โปรแกรมแก้ไขของคุณสำหรับเทมเพลต แต่มันไม่ได้ผล
userfuser

1
ฉันไม่แน่ใจว่าเกิดอะไรขึ้นกับสำเนา netbeans ของฉันเมื่อฉันโพสต์คำตอบนี้เป็นครั้งแรก แต่ตอนนี้ฉันใช้ 8.2 / * @var $ varName varType * / ใช้งานได้ดี
Mike

0

สำหรับ NetBeans IDE 8.2 ไวยากรณ์จะเป็นดังนี้:

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

สิ่งนี้จะให้คำแนะนำประเภทอย่างเหมาะสมสำหรับตัวแปรคงที่อย่างน้อยที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.