【问题标题】:Types in php, retype them and use their variables在 php 中输入,重新输入它们并使用它们的变量
【发布时间】:2015-01-25 23:57:34
【问题描述】:

是否有可能在 php 中使用“数据类型”?
我有 Page 类,它有变量(我使用公共,在我的情况下我不需要私有,没有安全风险等)。我创建了一些我的类的对象,将它们添加到数组中,然后我通过 foreach 来处理它们,我想在 foreach 中 使用 迭代对象,就像我的 Page 对象一样。所以我想让我的 ide (PhpStorm) 知道数组中的对象是 Page 类型,所以他可以悄悄告诉我他的变量。
在 Java 中,我会执行类似 (Page) myObject 的操作。比 ide 知道“Juhuu 程序员说,myObject 应该是 Page 类型,所以我让他像使用 Page 对象而不是像某些一般对象那样工作”
下面的代码应该能更多地解释我的问题:

注意:
我知道我可以在 foreach page->$url; 里面写它会起作用。但是我怎么应该记住所有变量的名称。更有可能我不想记住它们或不必找到它们,我希望它们耳语。

class Page {
   public $url;
   public $array_of_titles;
   //...
   function __construct($url,$tit) {
     $this->url = $url;
     $this->array_of_titles = $tit;
   }
}
$array_of_pages = array();
$url = "http://..."
$tit = {"aaa", "bbb", "ccc"}
$page = new Page($url, $tit);
$array_of_pages[] = $page;
//... add more pages to the array
foreach($array_of_pages as $page) {
   $my_url = $page->url; //this words but don't whisper obviously
   //because in $page could by any object
   //$my_url = (Page)$page->url; //this I would do in java to say 
   //"Hey $page is typeof Page man, I wanna whisper its methods"
}

【问题讨论】:

    标签: php phpstorm type-conversion


    【解决方案1】:

    像这样使用@var注解:

    foreach($allPages as $page)
    {
        /*
        * @var PageType $page 
        */
        $page->doesSomething();
    }
    

    @var 采用类类型及其适用的变量,您还可以在类中的声明或实例化 (iirc) 处使用 MyObjectType[] 指定数组是类的数组。

    另外,使用privateprotected 而不是public 更多的是关于良好的编程设计而不是安全性,我建议您阅读它以及多态性和继承。

    【讨论】:

    • 在 PHPStorm 中,放置数据类型和变量的方式并不重要。 PHP 和它的工具有时会很奇怪。我仍然渴望 PHP 中完全严格的类型提示(不仅仅是对象)
    • 感谢 Everon,很高兴知道...关于您的严格类型提示...请硬着头皮改用 C#。我坚持。
    • Netbeans 中的表示法是 /* @var $variable Type */ - 奇怪的是所有语言表示法都是类型变量,但是哦,好吧.. 那是你的 Javadoc
    • 啊哈哈,我有时考虑过,相信我。当我需要在桌面应用程序中使用 C# 时,它非常适合使用,但除此之外我会坚持使用 PHP :)
    • 但是如果您需要添加与检索和/或设置类对象持有的数据相结合的功能怎么办?您将不得不重写应用程序的多个部分。省去工作,提前考虑 (imo)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多