2013-06-12 8 views
6

Ich habe eine Instanz einer StdClass mit einigen Eigenschaften. Welches ist die korrekte Art, diese Eigenschaften in PHPDoc zu deklarieren? Ich versuchte dies, aber es scheint, es ist nicht ok:Deklarieren Sie Eigenschaften einer lokalen Variablen in PHPDoc

/** 
    * @var $requestParams stdClass 
    * @property string cancelUrl 
    */ 
    $requestParams = $someObj->getSomething(); 
+0

Ich glaube nicht, dass es möglich ist. – Gordon

Antwort

1

Das Problem mit new stdClass() ist, dass Sie Eigenschaften on the fly erklären können, so dass es schwierig wäre, für jeden documenter durch die gesamten Code zu analysieren, alle zu finden die Orte, wo man neue Eigenschaften hinzufügen, um stattdessen müssen Sie diese Klasse eine Klasse für sie und Dokument erstellen: diese

also anstatt das zu tun:

/** 
* ... doc block here 
*/ 
class SomeObj { 
    /** 
    * ... doc block here 
    * @return stdClass 
    */ 
    function getSomething() { 
     return new stdClass(); 
    } 
} 

Sie dies tun:

/** 
* ... doc block here 
*/ 
class SomeObj { 
    /** 
    * ... doc block here 
    * @return Something 
    */ 
    function getSomething() { 
     return new Something(); 
    } 
} 

/** 
* ... doc block here 
*/ 
class Something { 
    /** 
    * @var string 
    */ 
    public $cancelUrl; 
} 
2

Ihr Codebeispiel gegeben, das Beste, was Sie tun können, ist bedeuten, dass die $requestParams vom Typ stdClass über @var. Ihre Verwendung von @property wird nichts für Sie tun, da dieses Tag speziell nur für magische Eigenschaften definiert ist, die auf einer Klasse existieren ... daher wird nur gelesen und interpretiert, wenn es in einem Klasse Docblock ist.

Wenn Sie nur zeigen müssen, dass $ requestParams eine Instanz von stdClass ist, benötigen Sie nur @var. Wenn Sie jedoch angeben möchten, dass $ requestParams-> cancelUrl eine bekannte Zeichenfolgeneigenschaft ist, ohne zu einer tatsächlich definierten Klasse zu wechseln, müssen Sie eine andere lokale Variable auf die gleiche Weise verwenden wie $ requestParams eine lokale Variable ist:

Neben der Beantwortung Ihrer direkten Frage - wenn es Ihnen wirklich wichtig ist, Ihren Lesern zu zeigen, dass dieses $ requestParams-Element bestimmte definierte Eigenschaften hat, würde ich eine formale Klasse dafür schreiben. Die Implementierung in dieser Klasse kann natürlich nur eine interne stdClass für das Halten von Werten sein.

Verwandte Themen