包含文件的 NetBeans 自动完成功能不起作用?
Posted
技术标签:
【中文标题】包含文件的 NetBeans 自动完成功能不起作用?【英文标题】:NetBeans auto-completion from included file not working? 【发布时间】:2012-04-26 18:43:06 【问题描述】:我有一个名为 config.php 的文件,我还有其他文件包括 config.php。编辑其中一个文件时,我使用 config.php 中的一个对象,它会自动完成对象的名称。但是,当我尝试查看该对象的函数或变量(使用 ->)时,没有自动完成功能。有什么办法让它工作吗?
注意:我已经在对象定义之前将 /* @var $myObject myType */ 添加到 config.php 中。我是否必须将该行添加到包含 config.php 的每个文件中?这似乎不对。
编辑:添加示例。
目录;
config.php index.php lib/test.class.phpconfig.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 test */ 添加到 index.php 时它正在工作,但是我会有很多这样的文件,并且必须有比将该行添加到所有文件中更好的方法。
【问题讨论】:
它会在 config.php 中自动完成吗?你确定在其他文件中你在同一范围内使用这个变量,而不是用非对象覆盖它吗? 是的,它在配置文件中工作,我确信没有覆盖。完成对象 name 后,右上角会显示 config.php。我添加了一个示例。 【参考方案1】:确保项目的所有文件都在项目的包含路径中(右键单击项目 -> 属性 -> 包含路径)。通常只有您在 NetBeans 设置中配置的“全局包含路径”(例如,指向您的 PEAR 目录)。将包含您想要自动完成的源代码的所有目录添加到此包含路径。提示:此包含路径与 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 依靠此信息提供正确的提示。
【讨论】:
我设置了包含路径,还是什么都没有。如果你发给我一个你确定它工作的例子,我可以试试看问题是关于 IDE 还是技术。 @m_poorUser:克隆 github.com/Weltraumschaf/ebnf 并使用 NetBeans 打开子文件夹php
。它应该开箱即用。 NetBenas 的配置存储在nbproject
目录中。
我导入项目,检查配置文件,一模一样。然后我尝试了这个;在文件夹 src/EBNF/ 中有一个 Scanner.php 文件,将这一行添加到文件中; “$Scan = 新扫描仪();”然后我打开了需要Scanner.php的Command.php文件,我写了$Scan->,没有任何建议。是我的技术错误还是我的 IDE 坏了?
m_poorUser 第一:不要像你那样使用全局变量(在一个文件中声明并在另一个文件中使用),这是非常糟糕的风格并且容易出错。我从来没有这样做过,所以我不知道这是否适用于 NetBenas。第二:不要在配置文件中使用活动代码。由于可测试性,在配置文件中应该只有配置,没有可执行代码(函数/方法调用等)。什么有效:打开Parser.php
并在方法$this->scanner->
中输入,您将获得智能感知。其他专业提示:使用 JetBrains 的 PhpStorm。对于 PHP,这是一种比 NetBenas 更好的 IDE。【参考方案2】:
转到工具->选项->单击顶部的PHP图标->常规选项卡->找到“全局包含路径” -> 添加文件夹 ->
if(onLinux) 选择 /var/www; if(onWindows) 选择 c:\path_to_htdocs 或其他;
啊,今天的编程太多了.. :)
对我来说,这修复了自动完成和 ctrl+单击方法调用。
【讨论】:
刚刚来这里说,这解决了我的问题。 :)【参考方案3】:从 netbeans 转到 tools->options
转到编辑器选择并从代码完成中选择 php 作为语言部分。这将展开菜单,您将看到一个部分 Code Completion for Class Methods
通过选中该部分上的复选框来设置该配置。
我希望我理解正确。我也使用 netbeans,我可以在更改我的 netbeans 设置后自动完成。
【讨论】:
已经检查过了。类方法的自动完成适用于同一个文件,但是,如果对象来自包含的文件,则不起作用。顺便说一句,我的 NetBeans 版本是 7.0.1。如果我的示例适用于 NetBeans 的另一个版本(可能适用于您的版本),我可以检查这个答案是否正确。 我也在使用 7.0.1。我有一个初始化文件,它遍历文件夹并添加所需的类,我得到自动完成框来向我显示 ctrl+space 上的可用功能。在这种情况下,我看到的唯一区别是我的类名没有 name.以上是关于包含文件的 NetBeans 自动完成功能不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse 自动完成功能在某些 Java 文件中不起作用