Luk*_*uke 30 php foreach casting
在以下代码中,$quiz_object->personalities
包含一个Personality
对象数组.
// Loop through each personality that exists for the quiz
foreach($quiz_object->personalities AS $existing_personality)
{
// Show all of the existing personalities
echo $existing_personality->GetQuizMakerPersonalityHTML();
}
Run Code Online (Sandbox Code Playgroud)
我如何"转换"(我认为这是正确的词)我的变量$existing_personality
在foreach循环中作为对象类型?
我希望这样做,以便当我键入时$existing_personality->
,我获得该对象类型可用的公共函数列表.
UPDATE
目前,Zend Studio不知道我循环遍历循环中的一系列Personality
对象,它只是认为它是一个标准变量.但是,它是一种类型,我的代码运行得非常好.我只想在foreach循环中对我的变量进行IDE提示.
只是为了让我清楚,如果我有以下内容,则每个其他对象都会显示提示:
$personality_object = new Personality();
// I get the IDE hints here
echo $personality_object->MyFunction();
Run Code Online (Sandbox Code Playgroud)
但是当我开始在foreach中循环时,Zend无法知道我正在循环遍历一个对象数组.
这就是最初在我的Personality
对象中定义个性数组的方式:
class Personality
{
// Array of Personality objects
public $personalities = array();
}
Run Code Online (Sandbox Code Playgroud)
Kry*_*cke 76
这在很大程度上取决于您使用的IDE.
在Netbeans和IntelliJ中,您可以@var
在评论中使用:
/* @var $variable ClassName */
$variable->
Run Code Online (Sandbox Code Playgroud)
IDE现在将知道$ variable是类ClassName并在提示之后提示->
.
您也可以在自己的IDE中试用它.
您还可以@return
在getPersonalities()
方法中创建注释,声明返回将是a ClassName[]
,这意味着ClassName对象的数组:
/**
* Returns a list of Personality objects
* @return Personality[]
*/
function getPersonalities() {
return $this->personalities;
}
Run Code Online (Sandbox Code Playgroud)
这还取决于您的IDE如何解释此类提示.
要在foreach循环中使用它,您可以执行1:
/* @var $existing_personality Personality */
foreach( $quiz_object->personalities as $existing_personality ){
}
Run Code Online (Sandbox Code Playgroud)
或2:
foreach( $quiz_object->getPersonalities() as $existing_personality ){
}
Run Code Online (Sandbox Code Playgroud)
如果您的IDE足够友好,它们都应该启用IDE提示.
另外注意,如果你想在它自己的类中使用它,你可以在声明一个类变量时使用相同的签名:
class MyClass
{
/**
* @var ClassName[] $variable List of ClassName objects.
*/
var $variable;
}
Run Code Online (Sandbox Code Playgroud)
小智 9
我以为我会把它扔给那些使用phpStorm的人.
我发现让IDE自动填充对象方法的方法是在检查对象存在之前包括一个快速if检查,并且$ var是所述对象的实例.
例:
foreach ($objArray as $obj) {
if (is_object($obj) && $obj instanceof DataObject) {
$obj->thisMethodShouldBeAvailableInPHPStormNow();
}
Run Code Online (Sandbox Code Playgroud)
在寻找更好的方法的同时找到了这个问题,但上述内容对我有用.
干杯!
我知道这篇文章很旧,但我认为这可能对某人有所帮助:
在 PhpStorm 中以这种方式工作,也许在其他人中也是如此。
/**
* @param ClassName[] $variables
*/
public function loopFunction($variables){
foreach ($variables as $variable) {
echo $variable->functionName();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26655 次 |
最近记录: |