【发布时间】:2012-12-16 21:49:36
【问题描述】:
class Foo
{
public $var ;
function __construct($value)
{
$this->var = $value ;
}
}
$myFoo = new Foo('hello');
echo $myFoo->var . '<br>' ; // output : hello
// Question : how can I prevent another programer from accidentaly doing the following
$myFoo = 4 ;
echo $myFoo ; // output : 4
我的问题在评论中 // 问题:...
我希望我的同事能够仅使用 $myFoo->var(或 Foo 类中可用的任何公共突变器)为 $myFoo 赋值)
谢谢
编辑: 对于声称不可能的用户,SPL_Types PECL 扩展能够(在一定程度上)实现这一点,例如 http://php.net/manual/en/class.splint.php 或 http://blog.felixdv.com/2008/01/09/spl_types-in-php-and-strong-typing/
【问题讨论】:
-
你不能,但是你可以在需要使用它时检查变量类型,如果它不是你所期望的,则抛出异常/错误。您在示例中并没有真正重铸,而是为变量分配了一个新值。
-
你做不到。只有使用
=运算符离开时才能完成。 -
要么编写自己的 IDE,要么确保与聪明人合作。
-
关于 SPL 设法做到这一点...来自示例:
$int = new SplInt(94);。是什么让程序员不写$int = new SplInt(1234);之后?无论哪种方式,这是一个扩展,它改变了语言的行为以添加诸如类型安全之类的东西。首先,它改变语言,这不能在语言本身内完成。其次,它不提供常量。第三,程序员需要明确地使用这个,你不能强迫他。同样,您不能在创建值时强制分配给变量的值是常量(这适用于所有语言)。 -
SPL_Types 是 PHP 语言的扩展。它是实验性的。如果没有这种疯狂的打字机制,PHP 就已经够糟糕了。如果您想要强类型,请使用 Java/Tomcat 或类似的。