注释(在PHPDoc中)通过实现的函数的正确方法是什么__callStatic?更重要的是:有没有办法让NetBeans 和 PHPStorm理解这些是静态方法?
如果你想要更大的图片,这就是我对这个问题的看法.
问题:在我目前的项目中,我们有很多类应该是单例(DB代理等).不用说,我们至少有几百require_once并$foo = new FooProxy();线.
解决方案:我创建了一个Loader类来解决这个问题,使用__callStatic魔术方法,所以我们可以说$foo = Loader::FooProxy();.它非常适合我们的目的,但是:
问题:这种方式在团队中使用的IDE中显然没有类型提示.
解决方案:每个模块定义一个子类Loader,添加仅路由到的方法__callStatic.
问题:为了自动完成而添加实际解释的代码是不可接受的(这可以争论,但让我们暂时接受它).
解决方案:我们不添加任何实际方法,只需在PHPDoc中声明方法如下:
<?php
/**
* @method FooProxy FooProxy()
*/
class BarLoader extends Loader {}
?>
Run Code Online (Sandbox Code Playgroud)
问题:FooProxy不是静态方法.以下所有内容都不会使其成为静态:
<?php
/**
* @static
* @method FooProxy FooProxy()
*/
///////////////
/**
* @static @method A A()
* @method static A A()
* @method A …Run Code Online (Sandbox Code Playgroud) 在phpDoc生成的文档中,我可以使phpDoc生成指向给定param的自定义类型定义的链接
@param CustomType $variablename
Run Code Online (Sandbox Code Playgroud)
这很有效.但是,我目前正在记录的代码需要CustomType []参数,即所述CustomType的数组.我希望文档清楚,需要一个数组,但是当我使用时
@param CustomType[] $variablename
Run Code Online (Sandbox Code Playgroud)
phpDoc不再识别类型,因此无法链接到它的定义.在这种情况下,这非常重要 - 我正在记录一个API,它需要提供一些相当复杂的类型.
我为此尝试了几种不同的语法,所有这些语法都将条目视为单独的变量类型或在文档中中断类型识别.
除非我在参数说明中注意到它,但是在类型中显示参数的数组似乎更清楚.
编辑
使用phpDocumentor 2(与DocBlox合并)
@param CustomType[] $paramName
Run Code Online (Sandbox Code Playgroud)
语法有效,并且如@ Styx的回答中所述,PhpStorm支持使用该语法进行类型提示.
接受的答案适当更新.
我在PHP应用程序中使用了几个关联数组,我使用PHP文档来评论我的源代码.我从来没有真正为数组中的数组指定注释,但现在我需要这样做而不知道如何.
$array = array('id' => 'test', 'class' => 'tester', 'options' => array('option1' => 1, 'option2' => 2))
Run Code Online (Sandbox Code Playgroud)
如何以正确的方式@var和@param评论对此数组进行注释?我可以这样做,但我不知道这是否正确:
@param string $array['id']
@param string $array['class']
@param int $array['options']['option1']
Run Code Online (Sandbox Code Playgroud)
但是如何为这@var部分做到这一点?
我目前正在尝试删除我的项目中的所有错误和警告,我的PHPStorm中的检查工具给了我.
我遇到一个片段PHPStorm说"未使用的私有方法_xxx"虽然它实际上使用,但以动态的方式.这是一个简化的代码段:
<?php
class A
{
private function _iAmUsed()
{
//Do Stuff...
}
public function run($whoAreYou)
{
$methodName = '_iAm' . $whoAreYou;
if (method_exists($this, $methodName)) {
$this->$methodName();
}
}
}
$a = new A();
$a->run('Used');
?>
Run Code Online (Sandbox Code Playgroud)
在这个片段中,PHPStorm将告诉我"未使用的私有方法_iAmUsed",而事实上,它被使用...我怎么能通过添加PHPDocs或其他东西,让我的IDE理解我的方法实际上是用的?
请注意,我给我的"运行"调用,一个静态字符串,但我们可以想象这个:
<?php
$a->run($_POST['whoYouAre']); //$_POST['whoYouAre'] == 'Used'
?>
Run Code Online (Sandbox Code Playgroud)
非常感谢!
在我的项目中有一些目录和某些PHP文件的大小非常大,因为我的构建失败了,我想将它们排除在我的 build.xml
问题1 -我是否必须为--ignore="path/filename"项目中的每个php文件编写?
Ques2-有些文件不是php,但.dat我也应该提一下这些文件--ignore吗?
问题3 -我可以指定根据文件大小排除文件,以便排除所有大于500kb的文件吗?
我当前的xml文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project name="name-of-project" default="build" basedir=".">
<property name="root.dir" value="${basedir}/.."/>
<property name="source" value="${root.dir}"/>
<target name="clean"
description="Clean up and create artifact directories">
<delete dir="${basedir}/build/api"/>
<delete dir="${basedir}/build/code-browser"/>
<delete dir="${basedir}/build/coverage"/>
<delete dir="${basedir}/build/logs"/>
<delete dir="${basedir}/build/pdepend"/>
<mkdir dir="${basedir}/build/api"/>
<mkdir dir="${basedir}/build/code-browser"/>
<mkdir dir="${basedir}/build/coverage"/>
<mkdir dir="${basedir}/build/logs"/>
<mkdir dir="${basedir}/build/pdepend"/>
</target>
<target name="phpunit"
description="Run unit tests using PHPUnit and generates junit.xml and clover.xml">
<exec executable="phpunit" failonerror="true">
<env key="DOCUMENT_ROOT" value="${source}/api"/>
<env key="MODEL_ROOT" value="${source}/model"/> …Run Code Online (Sandbox Code Playgroud) 我一直在搜索这个问题,要么我没有使用正确的搜索条件,要么我错过了一些东西.
我试图弄清楚是否可以使用PHPdoc来定义对象返回的变量.
说我有以下课程:
class SomeClass {
public function staffDetails($id){
$object = new stdClass();
$object->type = "person";
$object->name = "dave";
$object->age = "46";
return $object;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,定义输入参数很容易.
/**
* Get Staff Member Details
*
* @param string $id staff id number
*
* @return object
*/
class SomeClass {
public function staffDetails($id){
$object = new stdClass();
$object->type = "person";
$object->name = "dave";
$object->age = "46";
return $object;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是是否有类似的事情来定义相关方法返回的对象的输出变量,以便另一个程序员不必打开这个类并手动查看方法以查看返回对象返回的内容?
我无法在PHPDoc中找到关于Closure类型的任何文档.所以我的问题是如何定义发送到闭包的参数的参数及其返回值?
例:
我如何描述"回调"将获得"MyCustomClass",数字和字符串,并返回"MyOtherCustomClass"?
/**
* @param MyCustomClass $cls
* @param Closure $callback this isn't really explaining what this is
*
* @return MyOtherCustomClass
*/
function changer($cls, $callback){
return $callback($cls, 2, "a string");
}
changer($aCustomeClass, function($cls, $int, $string){
return new MyOtherCustomClass($cls, $int, $string);
})
Run Code Online (Sandbox Code Playgroud)
或者如果它可能的话?
我发现自己处于切换机箱跌落的最佳选择.我的意思是:
switch($bar)
{
case 0:
// do something
case 1:
// do more
break;
//more cases
}
Run Code Online (Sandbox Code Playgroud)
目前我的IDE(phpStorm)正在发出关于坠落的警告.
在phpDoc中是否有一种可接受的方式来记录这种预期的漏洞?
我知道你们中的一些人无疑会说不要这样做,但我赞同这个邪恶的定义,这肯定是"替代品中最不好的".
有没有办法将魔法属性标记为已弃用?考虑以下简化代码:
/**
* Example class
*
* @property string $foo A foo variable.
*/
class Example {
/**
* Magic getter
*/
public function __get($var) {
if('foo' === $var) {
// do & return something
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如何指出其他开发者,他们不应该再使用Example::$foo了?我想到的唯一可行解决方案是:
/**
* Example class
*/
class Example {
/**
* A foo variable.
*
* @var string
* @deprecated
*/
public $foo;
/**
* Magic getter
*/
public function __get($var) {
if('foo' === $var) {
// do …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用phpDocumentor(第一次,我不知道我在做什么).实际上,我只想在SublimeText 2和这个插件中使用它.你能一步一步地指导我做什么才能让它发挥作用?这就是我现在所做的:(我正在使用Windows 7)从这里下载phpDocumentor 并将其放置在某处.我已经创建了系统PATH phpdoc/bin(所以phpdoc.bat可以通过sublime插件执行)然后还添加了系统路径php(来自WAMPserver安装)
当我尝试使用我的插件(或phpdoc在控制台窗口内执行)时,我收到此错误:
Could not open input file: \phpdoc.php
phpdoc ×10
php ×8
arrays ×2
phpstorm ×2
closures ×1
custom-type ×1
jenkins ×1
phpunit ×1
sublimetext2 ×1