Зацьменне не дазваляе тып аб'екта ў PHP масіва

Я прыйшоў з Java свету і паспрабаваць тыя ж самыя «лёгкія» рэчы ў Php.

У мяне ёсць няўхільны фіктыўны аб'ект дадзеных:

class BugTimeData {

    private $bugid = "";
    private $startDate = "";
    private $resolvedDate = "";
    private $status = "";
    private $weekends = ""; 

    function __construct($bugid, $startDate, $resolvedDate, $status) {
        $this->bugid = $bugid;
        $this->startDate = $startDate;
        $this->resolvedDate = $resolvedDate;
        $this->status = $status;
    }

    function getBugId() {
        return $this->bugid;
    }

    function getStartDate() {
        return $this->startDate;
    }

    function getResolvedDate() {
        return $this->resolvedDate;     
    }

    function getStatus() {
        return $this->status;
    }

    function getWeekendsBetween() {
        return $this->weekends;
    }
}

А дадаць аб'ект з гэтага класа ў масіў:

$data= new BugTimeData($a, $b, $c, $d);
array_push($content, $data);

Я хачу, каб перабраць гэты масіў, зачытвае аб'екты і атрымаць доступ да метадаў:

foreach($time_prio_bug_content as $key => $value) {
    var_dump($value->getStatus());
}

Гэта працуе! Але мой IDE (Eclipse) на самой справе не ведаю, што значэнне $ ад тыпу BugTimeData </​​код>. Таму я не магу атрымаць доступ да агульных метадаў у лёгкім шляху.

Question: How to cast $value to a object from type BugTimeData?

У Java гэта вельмі лёгка (таму што я не патрэбны кідок, таму што я магу вызначыць тып аб'ектаў пры стварэнні масіва) і прама наперад. Так цікава, чаму гэта не магчыма ў Php?

1
@CORRUPT Вядома, але не ад тыпу BugTimeData.
дададзена аўтар sk2212, крыніца
@CORRUPT Вядома, але не ад тыпу BugTimeData.
дададзена аўтар sk2212, крыніца
PHP не падтрымлівае тое, што вы спрабуеце зрабіць першапачаткова. IDE, які я выкарыстоўваю, PhpStorm, дазваляе выкарыстоўваць анатацыі для аб'явы тыпу (клас або прымітыву) любой зменнай.
дададзена аўтар leftclickben, крыніца
PHP не падтрымлівае тое, што вы спрабуеце зрабіць першапачаткова. IDE, які я выкарыстоўваю, PhpStorm, дазваляе выкарыстоўваць анатацыі для аб'явы тыпу (клас або прымітыву) любой зменнай.
дададзена аўтар leftclickben, крыніца
<�Код> $ значэнне ужо ёсць аб'ект.
дададзена аўтар BlitZ, крыніца

9 адказы

Гэта проста праблема вашай IDE, а не PHP. Калі дадаць адпаведныя намёкі тыпу анатацый, любы прыстойны IDE будзе забраць на яго. Напрыклад, вызначыць, што масіў змяшчае аб'екты пэўнага тыпу:

/** @var BugTimeData[] $array */
$array = array();

Калі дадзеныя паступаюць з функцыі або метады, дадайце адпаведны @return Дакументацыя тэг подпісы метады. У горшым выпадку, адзначце зменную ўнутры цыкла:

foreach($time_prio_bug_content as $key => $value) {
    /** @var BugTimeData $value */
    var_dump($value->getStatus());
}
3
дададзена
@ Sk2 «Дынамічна надрукаваў» не азначае «бестиповой». PHP проста, як і набрана ў Java ёсць, але тыпы выводзяцца з кантэксту, без неабходнасці быць відавочна абвешчаныя ўсюды (вядома $ Foo = «бар» з'яўляецца радком, то няма неабходнасці аб'яўляць яго) і канвертуецца няяўна пры неабходнасці на аснове працы (вядома $ абуўшы + $ бар выкарыстоўвае два цэлых колькасці, няма неабходнасці ператвараць іх у відавочным выглядзе). Адзінае адрозненне сапраўды з'яўляецца тое, што вам не трэба залішне тыпу String String = «радок» або string.toNumber() .
дададзена аўтар deceze, крыніца
Добра ... падобна на працу з Eclipse. Nice! Я не разумею, чаму кідае на аб'ект, Int, двайковы і г.д., магчыма, калі PHP з'яўляецца дынамічна тыпізаванай мовай наогул. Аднак ... праблема вырашана!
дададзена аўтар sk2212, крыніца

Гэта проста праблема вашай IDE, а не PHP. Калі дадаць адпаведныя намёкі тыпу анатацый, любы прыстойны IDE будзе забраць на яго. Напрыклад, вызначыць, што масіў змяшчае аб'екты пэўнага тыпу:

/** @var BugTimeData[] $array */
$array = array();

Калі дадзеныя паступаюць з функцыі або метады, дадайце адпаведны @return Дакументацыя тэг подпісы метады. У горшым выпадку, адзначце зменную ўнутры цыкла:

foreach($time_prio_bug_content as $key => $value) {
    /** @var BugTimeData $value */
    var_dump($value->getStatus());
}
3
дададзена
@ Sk2 «Дынамічна надрукаваў» не азначае «бестиповой». PHP проста, як і набрана ў Java ёсць, але тыпы выводзяцца з кантэксту, без неабходнасці быць відавочна абвешчаныя ўсюды (вядома $ Foo = «бар» з'яўляецца радком, то няма неабходнасці аб'яўляць яго) і канвертуецца няяўна пры неабходнасці на аснове працы (вядома $ абуўшы + $ бар выкарыстоўвае два цэлых колькасці, няма неабходнасці ператвараць іх у відавочным выглядзе). Адзінае адрозненне сапраўды з'яўляецца тое, што вам не трэба залішне тыпу String String = «радок» або string.toNumber() .
дададзена аўтар deceze, крыніца
Добра ... падобна на працу з Eclipse. Nice! Я не разумею, чаму кідае на аб'ект, Int, двайковы і г.д., магчыма, калі PHP з'яўляецца дынамічна тыпізаванай мовай наогул. Аднак ... праблема вырашана!
дададзена аўтар sk2212, крыніца

Гэта проста праблема вашай IDE, а не PHP. Калі дадаць адпаведныя намёкі тыпу анатацый, любы прыстойны IDE будзе забраць на яго. Напрыклад, вызначыць, што масіў змяшчае аб'екты пэўнага тыпу:

/** @var BugTimeData[] $array */
$array = array();

Калі дадзеныя паступаюць з функцыі або метады, дадайце адпаведны @return Дакументацыя тэг подпісы метады. У горшым выпадку, адзначце зменную ўнутры цыкла:

foreach($time_prio_bug_content as $key => $value) {
    /** @var BugTimeData $value */
    var_dump($value->getStatus());
}
3
дададзена
@ Sk2 «Дынамічна надрукаваў» не азначае «бестиповой». PHP проста, як і набрана ў Java ёсць, але тыпы выводзяцца з кантэксту, без неабходнасці быць відавочна абвешчаныя ўсюды (вядома $ Foo = «бар» з'яўляецца радком, то няма неабходнасці аб'яўляць яго) і канвертуецца няяўна пры неабходнасці на аснове працы (вядома $ абуўшы + $ бар выкарыстоўвае два цэлых колькасці, няма неабходнасці ператвараць іх у відавочным выглядзе). Адзінае адрозненне сапраўды з'яўляецца тое, што вам не трэба залішне тыпу String String = «радок» або string.toNumber() .
дададзена аўтар deceze, крыніца
Добра ... падобна на працу з Eclipse. Nice! Я не разумею, чаму кідае на аб'ект, Int, двайковы і г.д., магчыма, калі PHP з'яўляецца дынамічна тыпізаванай мовай наогул. Аднак ... праблема вырашана!
дададзена аўтар sk2212, крыніца

Вы не можаце. Паколькі PHP практычна безтипные, і пры чытанні коды няма ніякага спосабу даведацца, які тып пэўныя пераменны. Гэта магчыма толькі ў час выканання.

2
дададзена
... акрамя таго, калі ваш IDE падтрымлівае яго з дапамогай анатацый ...
дададзена аўтар leftclickben, крыніца

Вы не можаце. Паколькі PHP практычна безтипные, і пры чытанні коды няма ніякага спосабу даведацца, які тып пэўныя пераменны. Гэта магчыма толькі ў час выканання.

2
дададзена
... акрамя таго, калі ваш IDE падтрымлівае яго з дапамогай анатацый ...
дададзена аўтар leftclickben, крыніца

Вы не можаце. Паколькі PHP практычна безтипные, і пры чытанні коды няма ніякага спосабу даведацца, які тып пэўныя пераменны. Гэта магчыма толькі ў час выканання.

2
дададзена
... акрамя таго, калі ваш IDE падтрымлівае яго з дапамогай анатацый ...
дададзена аўтар leftclickben, крыніца

У якасці альтэрнатывы анатацыі я мяркую, вы можаце тыпу намёк як такія:

var $value = new BugTimeData;//this tells the IDE which type the variable will hold from here on
foreach($time_prio_bug_content as $key => $value) {
    var_dump($value->getStatus());
}

або рэалізаваць метад класа для кідка з тыпам намякаючы аргумент і вяртання аб'екта (гл спасылка )

1
дададзена
@BobGregor Вы цалкам адсутнічае кропка. Мой код (і спасылка) не значаць тыпу вяртаецца значэння функцыі падказкі. Замест гэтага, відавочна абвясціць зменную $ значэнне перад яго выкарыстаннем. Я дапамагаю IDE зразумець, што гэта тып будзе ў наступным кодзе.
дададзена аўтар zsawyer, крыніца
намёкі тыпу з'яўляюцца аргументы, а не для вяртаюцца значэнняў. Ён можа быць дададзены ў PHP 6 - гэта ў выглядзе RFC тут: wiki.php.net/rfc/returntypehint2 </а>
дададзена аўтар Bob Gregor, крыніца
Ах! Цяпер я бачу свой пункт гледжання - вы можаце дадаць каментар у вашым прыкладзе кода, каб паказаць, што $ значэнне элемента з'яўляецца часовай намёк на IDE. Я зрабіў гэта хак ў мінулым з IDE.
дададзена аўтар Bob Gregor, крыніца

У якасці альтэрнатывы анатацыі я мяркую, вы можаце тыпу намёк як такія:

var $value = new BugTimeData;//this tells the IDE which type the variable will hold from here on
foreach($time_prio_bug_content as $key => $value) {
    var_dump($value->getStatus());
}

або рэалізаваць метад класа для кідка з тыпам намякаючы аргумент і вяртання аб'екта (гл спасылка )

1
дададзена
@BobGregor Вы цалкам адсутнічае кропка. Мой код (і спасылка) не значаць тыпу вяртаецца значэння функцыі падказкі. Замест гэтага, відавочна абвясціць зменную $ значэнне перад яго выкарыстаннем. Я дапамагаю IDE зразумець, што гэта тып будзе ў наступным кодзе.
дададзена аўтар zsawyer, крыніца
намёкі тыпу з'яўляюцца аргументы, а не для вяртаюцца значэнняў. Ён можа быць дададзены ў PHP 6 - гэта ў выглядзе RFC тут: wiki.php.net/rfc/returntypehint2 </а>
дададзена аўтар Bob Gregor, крыніца
Ах! Цяпер я бачу свой пункт гледжання - вы можаце дадаць каментар у вашым прыкладзе кода, каб паказаць, што $ значэнне элемента з'яўляецца часовай намёк на IDE. Я зрабіў гэта хак ў мінулым з IDE.
дададзена аўтар Bob Gregor, крыніца

У якасці альтэрнатывы анатацыі я мяркую, вы можаце тыпу намёк як такія:

var $value = new BugTimeData;//this tells the IDE which type the variable will hold from here on
foreach($time_prio_bug_content as $key => $value) {
    var_dump($value->getStatus());
}

або рэалізаваць метад класа для кідка з тыпам намякаючы аргумент і вяртання аб'екта (гл спасылка )

1
дададзена
@BobGregor Вы цалкам адсутнічае кропка. Мой код (і спасылка) не значаць тыпу вяртаецца значэння функцыі падказкі. Замест гэтага, відавочна абвясціць зменную $ значэнне перад яго выкарыстаннем. Я дапамагаю IDE зразумець, што гэта тып будзе ў наступным кодзе.
дададзена аўтар zsawyer, крыніца
намёкі тыпу з'яўляюцца аргументы, а не для вяртаюцца значэнняў. Ён можа быць дададзены ў PHP 6 - гэта ў выглядзе RFC тут: wiki.php.net/rfc/returntypehint2 </а>
дададзена аўтар Bob Gregor, крыніца
Ах! Цяпер я бачу свой пункт гледжання - вы можаце дадаць каментар у вашым прыкладзе кода, каб паказаць, што $ значэнне элемента з'яўляецца часовай намёк на IDE. Я зрабіў гэта хак ў мінулым з IDE.
дададзена аўтар Bob Gregor, крыніца