- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通常会尝试远离 PHP 的魔术方法,因为它们似乎混淆了对象的公共(public)接口(interface)。也就是说,它们似乎被越来越多地使用,至少在我读过的代码中,所以我不得不问:对于何时使用它们有任何共识吗?这三种魔法方法的使用有什么共同的模式吗?
最佳答案
主要原因是您不需要输入太多内容。您可以将它们用于 ORM 记录并充当隐式 setter/getter:
使用__call()
:
$user = new User();
$user->setName("Foo Bar");
$user->setAge(42);
$user->save();
使用__set()
:
$user->name = "Foo Bar";
$user->age = 42;
映射到一个简单的数组:
array(
"name" => "Foo Bar",
"age" => 42
)
将这样的数组写入数据库比进行大量手动调用来收集所有需要的信息要容易得多。与公共(public)成员相比,__set()
和 __get()
还具有另一个优势:您可以验证/格式化您的数据。
关于php - PHP魔法方法的实际应用——__get、__set和__call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5979830/
我正在做一个项目,我想尝试“延迟加载”对象。 我已经使用魔术方法 __call($name, $arguments) 设置了一个简单的类。 我想要做的是传递 $arguments ,而不是作为数组,而
php 中的神奇函数 __call() 在类中使用。除了函数之外,还有类似的神奇函数吗?就像 __autoload() 用于函数一样。 例如这样的事情 function __call($name, $
我有这部分代码: class FTPClient { public function __construct() { $args_num=func_num_args();
我正在使用这两种魔术方法 _call 和 _callStatic用于我自己的 ORM/Activerow 之类的实现。它们主要用于捕获某些函数调用:__call 负责 getter 和 setter,
我正在尝试使用魔术函数进行重载 这是我的代码: 类文件1 class vLiteUser{ public function __call($methodname,$argume
我正在尝试使用魔术函数进行重载 这是我的代码: 类文件1 class vLiteUser{ public function __call($methodname,$argume
我正在使用 Mockery 通过 __call() 魔术方法模拟一个类。 问题是我的模拟对象有 __call() 与真实类的签名不同,我得到这个错误: ErrorException: Declarat
静态调用函数时是否可以使用__call魔术方法? 最佳答案 还没有,有建议的(现已有)__callStaticDocs我最后知道的管道中的方法。否则,__call 和其他 __ 魔法方法只能被对象实例
class a { public function f(&$ref1, &$ref2) { $ref1 = 'foo'; $ref2 = 'bar';
我有一个对象,它使用神奇的 __call 方法来调用不同对象的方法。 有时此方法将用于调用需要其一个或多个参数作为引用的方法。 从 php 5.3 开始,调用时按引用传递已被弃用,因此我不能依赖按引用
也许是个奇怪的问题,但是...我有一个神奇的 __call 方法,它返回某些类的实例,或者,如果没有这样的类,则在底层对象中调用相同的方法。 public function __call($name,
我正在处理的项目包含类似于 call_user_func(_array) 的包装器,它在执行前进行一些检查。其中一项检查是 method_exists(如果提供的第一个参数是类的实例,第二个是方法名称
我已经将我的项目文件移动到另一台服务器上,现在我在我的所有页面中都得到了这个,就像我错过了一些配置一样,有人知道我能做什么吗? 我正在使用 Zend Framework 1.11.11 ! 您需要哪些
我有两个模型: class Someinfo(models.Model): name = models.CharField(max_length=200) #something else class
在 PHP 中,即使方法不存在,您也可以使用“神奇”__call 函数检测何时调用该方法。 public function __call($methodName, $args) { // do
我编写了一个相当简单的延迟加载代理类,我过去曾在 http://blog.simonholywell.com/post/2072272471/logging-global-php-objects-la
我在一些 mvc 代码中使用 __call 魔法来生成一个可自动加载的表单框架,但我遇到了一个问题,我希望这里有人可以解决这个问题。 __call 魔法需要两个参数:$methodName 和 $ar
我编写了一个相当简单的延迟加载代理类,我过去曾在 http://blog.simonholywell.com/post/2072272471/logging-global-php-objects-la
假设我有以下代码: local t = {}; setmetatable(t, {__call=print}); t(3, 5, 7) 代替打印: 3 5 7 它打印: table: 0x
我认为一个简单的虚拟示例文件比长单词更能解释 t = {} t.__call = print t.__call(1) t(2) 根据documentation ,因为 t 是一个表,对 t 的调用,如
我是一名优秀的程序员,十分优秀!