【发布时间】:2013-01-17 20:31:49
【问题描述】:
我刚刚遇到了这个致命错误
可捕获的致命错误:传递给 File::__construct() 的参数 1 必须是整数的实例,整数给定,在第 9 行的 /home/radu/php_projects/audio_player/index.php 中调用并在 /home/ 中定义radu/php_projects/audio_player/php/File.php 在第 7 行
所以,有课
class File{
public $id;
public $name;
public $file_paths;
public function __construct(integer $id=null, string $name=null, array $file_paths=null)
{
foreach(func_get_args() as $name => $val)
{
$this->$name = $val;
}
}
}
这是触发错误的代码
$file = new File(1, "sound", array());
我是否遗漏了什么或者这个 PHP 类型提示有什么不好的地方?
【问题讨论】:
-
PHP 不支持简单类型的提示 - 仅支持命名类和接口,
stdClass、array和(最新版本)callable。 -
不相关,但您可能希望将这些属性从
public更改为protected,因此它们被类封装。 -
哦,那不是很好..关于公共属性 - 我不打算创建设置器,这样我可以轻松更改实例的状态..
-
如果不了解整个类以及它的使用(和将会)有多么重要,就很难回答有关封装的问题。它肯定会起作用,但我的观点总是从尽可能好的设计开始 - 危险是你会从说“公共属性适合小类”开始,然后它会变成一个大类,你最终会得到更难维护的技术债务。但是,这取决于你!
-
那篇 Google 文章在性能方面肯定是正确的,但对于大型系统来说,这不是很好的建议,imo。
标签: php php-5.3 type-hinting