2010-10-01 95 views
0

我有一个使用__set魔术方法的类。其中一个属性只能使用一定范围的字符串值来设置,我能想到的最好的例子是mysql数据类型ENUM('value_one','value_two','value_three')。php在重载类属性时验证setter的最佳实践

我会在__set方法中添加条件语句以区分哪些属性正在设置以及值是否对该属性有效?

__set方法中的大开关语句被认为是草率的练习,它们是产生所需结果的更好方法吗?

感谢, 本

回答

0

会我把条件语句 的__set方法中区分 之间属性被设置 和值是否是有效的 该属性?

是的第一部分,不是第二部分。

是一个 __set方法被认为草率的做法里面大的switch语句,是他们的 产生预期的效果更好的办法?

__set方法应该确定哪些变量是试图设定,然后的功能其余转嫁给私人二传手setParticularVar。然后setParticularVar将包含特定于验证该变量的逻辑,并且如果传递了无效值,则可以抛出异常。

或者,您可以使私有setter公开,而允许两种方式来设置变量,但这并不理想,因为两种设置值的方式并不像设计清晰。

0

__set功能可以检查一个名为类似presetVariableName方法,这就是所谓并通过了新的值作为参数是否存在等。

该函数然后可以执行验证逻辑,并且返回truefalse关于它是否有效。

+0

或者你可以命名方法'setVariableName'并将其用作setter。这个神奇的方法因此只能用作“捷径”。另外,你可以只为那些需要验证的变量实现特定的setter(保存你需要编写的代码)... – ircmaxell 2010-10-01 14:54:17

+0

我个人不是有两种设置属性的方法,即'$ obj- > color ='blue''和'$ obj-> setColor('blue')'。我更喜欢界面有一种或另一种。然而,这只是我,很多人都这样做。 – webbiedave 2010-10-01 15:03:42

+0

谢谢你的评论,让我更好地理解如何最好地执行所需的逻辑! – Globalz 2010-10-01 23:40:26