包含文件的 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.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 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-&gt;scanner-&gt; 中输入,您将获得智能感知。其他专业提示:使用 JetBrains 的 PhpStorm。对于 PHP,这是一种比 NetBenas 更好的 IDE。【参考方案2】:

转到工具->选项->单击顶部的PHP图标->常规选项卡->找到“全局包含路径” -> 添加文件夹 ->

if(onLinux) 选择 /var/www; if(onWindows) 选择 c:\path_to_htdocs 或其他;

啊,今天的编程太多了.. :)

对我来说,这修复了自动完成和 ctrl+单击方法调用。

【讨论】:

刚刚来这里说,这解决了我的问题。 :)【参考方案3】:

从 netbeans 转到 tools-&gt;options 转到编辑器选择并从代码完成中选择 php 作为语言部分。这将展开菜单,您将看到一个部分 Code Completion for Class Methods

通过选中该部分上的复选框来设置该配置。

我希望我理解正确。我也使用 netbeans,我可以在更改我的 netbeans 设置后自动完成。

【讨论】:

已经检查过了。类方法的自动完成适用于同一个文件,但是,如果对象来自包含的文件,则不起作用。顺便说一句,我的 NetBeans 版本是 7.0.1。如果我的示例适用于 NetBeans 的另一个版本(可能适用于您的版本),我可以检查这个答案是否正确。 我也在使用 7.0.1。我有一个初始化文件,它遍历文件夹并添加所需的类,我得到自动完成框来向我显示 ctrl+space 上的可用功能。在这种情况下,我看到的唯一区别是我的类名没有 name..php 一种表示法。我的类名与文件名匹配。 NetBeans 启动时,状态栏显示“正在扫描项目”。所以我假设它正在寻找类、方法等。我没有改变关于它的设置。我尝试用它包含的类名重命名类文件,但没有用。我想你可能误解了这个问题。我看到自动完成菜单,但是,如果只有对象在我正在处理的文件中。如果这对你有用,那意味着我做错了什么。请尝试我发送的示例,并让我知道自动完成是否对 index.php 文件起作用。

以上是关于包含文件的 NetBeans 自动完成功能不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 自动完成功能在某些 Java 文件中不起作用

Javascript 自动完成功能在 ascx 中不起作用

首次加载页面时,Jquery UI 自动完成功能不起作用

知道为啥这个 Jquery 自动完成功能不起作用吗?

Xcode 自动完成功能在 Swift 游乐场的 Sources 文件夹中不起作用

PhpStorm 中的 TailwindCSS 自动完成功能不起作用