2012-04-14 82 views
10

我有一個名爲config.php的文件,我有其他文件包括config.php。編輯其中一個文件時,我使用config.php中的一個對象,並自動完成對象的名稱。但是,當我嘗試查看此對象的函數或變量(使用 - >)時,沒有自動完成。有什麼辦法可以使它工作嗎?NetBeans從包含的文件中自動完成不工作?

注意:我已經在對象定義之前添加了/ * @var $ myObject myType */config.php。我是否必須將該行添加到包含config.php的每個文件中?這看起來不正確。

編輯:添加樣本。

目錄;

  • 的config.php
  • 的index.php
  • LIB/test.class.php

的config.php;

<?php 
define('ABSPATH', dirname(__FILE__)); 
include_once ABSPATH.'/lib/test.class.php'; 

/* @var $TestObj test */ 
$TestObj = new test(); 

// auto complete works here. 
$TestObj->someFunction(); 
?> 

index.php;

<?php 
include_once 'config.php'; 

// here, auto completes object name 
// not lists functions or variables after -> 
$TestObj->someFunction(); 
?> 

lib/test.class.php;

<?php 
class test { 
    public $var1; 

    public function someFunction() { 
     echo 'I am some function.'; 
     return 0; 
    } 
} 
?> 

它工作時,我添加/ * @var $ TestObj測試*/index.php的,但我將有很多這樣的文件,而且必須比添加該行所有的更好的方法文件。

+0

它會在config.php中自動完成嗎?你確定在其他文件中你在相同的範圍內使用這個變量,而不是用非對象覆蓋它嗎? – 2012-04-14 22:09:20

+0

是的,它在配置文件中工作,我相信沒有覆蓋。當完成object _name_時,它會在右上角顯示config.php。我添加了一個樣本。 – 2012-04-14 23:03:48

回答

7

確保項目的所有文件都在項目的包含路徑中(右擊項目 - >屬性 - >包含路徑)。通常,只有您在NetBeans設置中配置的「全局包含路徑」(例如,指向您的PEAR目錄)。將包含要自動完成的源代碼的所有目錄添加到此包含路徑。提示:這個include路徑與PHP本身使用的include_path無關。

此外,而不是在cient代碼使用提示:

/* @var $TestObj test */ 
$TestObj->... 

你應該給源多一些apidoc,如:

<?php 
class test { 
    /** 
    * @var SomeClass 
    */ 
    public $var1; 

    /** 
    * @return int 
    */ 
    public function someFunction() { 
     echo 'I am some function.'; 
     return 0; 
    } 
} 

因爲PHP的動態特性的IDE realies上這些信息給予正確的提示。

+1

我設置了包含路徑,仍然沒有。如果你給我一個你確定它正在工作的例子,我可以試着看看問題是關於IDE還是技術。 – 2012-04-24 10:43:12

+0

@m_poorUser:克隆https://github.com/Weltraumschaf/ebnf並使用NetBeans打開子文件夾「php」。它應該開箱即用。 NetBenas的配置存儲在'nbproject'目錄中。 – Weltraumschaf 2012-04-24 17:29:11

+0

我導入項目,檢查配置文件,完全一樣。然後我嘗試了這個;在文件夾src/EBNF /有一個Scanner.php文件,將此行添加到文件中; 「$ Scan = new Scanner();」然後我打開需要Scanner.php的Command.php文件,我寫了$ Scan->,沒有任何建議。我的技術是錯誤的還是我的IDE壞了? – 2012-04-24 18:29:16

3

從netbeans轉到tools->options 轉到編輯器選擇和從代碼完成選擇PHP的語言部分。這將展開菜單,您將看到一個部分Code Completion for Class Methods

通過選擇該部分的複選框來設置該配置。 enter image description here

我希望我能理解這個權利。我也使用netbeans,並且在更改netbeans設置後我可以自動完成。

+0

它已被檢查。類方法的自動完成對同一個文件起作用,但是,如果對象來自包含的文件,則該方法無效。順便說一下,我的NetBeans版本是7.0.1。如果我的示例適用於其他版本的NetBeans(也許在您的版本中),我可以檢查這個答案是否正確。 – 2012-04-20 21:24:10

+0

我也使用7.0.1。我有一個init文件循環通過文件夾並添加所需的類,我得到自動完成框來顯示我在ctrl +空間可用的功能。只有我在這種情況下看到的差異是我的班級名稱沒有名稱。 .php表示法。我的類名匹配文件名。 – PoX 2012-04-22 21:29:47

+0

當NetBeans啓動時,狀態欄顯示「掃描項目」。所以我認爲它正在尋找類,方法等我沒有改變一個設置。我嘗試使用它包含的類的名稱重命名類文件,但沒有奏效。我想你可能會誤解這個問題。我看到自動完成菜單,但是,如果只有對象在我正在處理的文件中。如果這對你有用,那意味着我正在做一些真正錯誤的事情。請嘗試我發送的示例,並讓我知道自動完成是否在index.php文件上工作。 – 2012-04-22 22:10:14

6

進入工具 - >選項 - >點擊圖標PHP之上 - >常規選項卡 - >找到 「環球包含路徑」 - >添加文件夾 - >

如果(onLinux){選擇在/ var /萬維網; if(onWindows){選擇c:\ path_to_htdocs或其他; }

啊,今天太多的編程.. :)

對於我來說,這個自動完成修復和Ctrl +單擊方法調用。

+0

這是爲我做的,非常感謝你:-) – 2016-03-09 21:16:26

+0

剛來這裏說,這解決了我的問題。 :) – 2016-03-23 19:50:34