- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这样做会被认为是好的做法吗...
我的 A 类具有以下定义:
class A{
private $_varOne;
private $_varTwo;
private $_varThree;
public $varOne;
public function __get($name){
$fn_name = 'get' . $name;
if (method_exists($this, $fn_name)){
return $this->$fn_name();
}else if(property_exists('DB', $name)){
return $this->$name;
}else{
return null;
}
}
public function __set($name, $value){
$fn_name = 'set' . $name;
if(method_exists($this, $fn_name)){
$this->$fn_name($value);
}else if(property_exists($this->__get("Classname"), $name)){
$this->$name = $value;
}else{
return null;
}
}
public function get_varOne(){
return $this->_varOne . "+";
}
}
$A = new A();
$A->_varOne; //For some reason I need _varOne to be returned appended with a +
$A->_varTwo; //I just need the value of _varTwo
为了不创建 4 个 set 和 4 个 get 方法,我使用了魔术方法来为我需要的属性调用受人尊敬的 getter,或者只返回属性的值而不做任何更改。这可以被认为是好的做法吗?
最佳答案
不知道最佳实践,但是当您需要延迟加载属性时,__get 会非常有用,例如获取它时涉及复杂的钙化或数据库查询。此外,php 提供了一种优雅的方式来缓存响应,只需创建一个具有相同名称的对象字段,从而防止再次调用 getter。
class LazyLoader
{
public $pub = 123;
function __get($p) {
$fn = "get_$p";
return method_exists($this, $fn) ?
$this->$fn() :
$this->$p; // simulate an error
}
// this will be called every time
function get_rand() {
return rand();
}
// this will be called once
function get_cached() {
return $this->cached = rand();
}
}
$a = new LazyLoader;
var_dump($a->pub); // getter not called
var_dump($a->rand); // getter called
var_dump($a->rand); // once again
var_dump($a->cached); // getter called
var_dump($a->cached); // getter NOT called, response cached
var_dump($a->notreally); // error!
关于PHP 魔术方法 __set 和 __get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4110640/
我目前正在制作一个基于对象的 API。我有一个名为 Part 的抽象类,每个 child 都会扩展它。 Part 有一个 __set 函数,它将值存储在一个名为 $attributes 的 prote
我是 php 世界的新手。我试图了解 __set() 魔术方法在 php 中的工作原理。这里我使用 __set() 创建一个新属性__set() em> 方法。我有一个 if 语句,用于检查该属性是否
这设法在对象上创建一个新属性。但是,有人可以通过支持链接解释为什么 setAttrib 有两种不同的行为方式吗?为什么它不会导致……等等……堆栈溢出!!?? class Test { public
我正在尝试为类设置一个不明确的变量。沿着这些线的东西: values[$key]; } function __set($key, $value){ $this->value
任何人都可以向我解释这种行为的逻辑吗? 考虑以下情况: class EPPDomain { protected $myField; public static function bui
class Dog { protected $bark = 'woof!'; public function __get($key) { if (isset($this
想知道是否可以执行以下操作(我知道代码不会按预期工作,只是试图达到目的): class Form { private $v = array(); function __set($var
我正在构建一个包含多个输入验证的类,我决定将它们放在 __set 方法中(我不确定这是否是正确的形式,因为我的 OOP 经验有限)。这似乎工作正常,当从类外部传递无效值时抛出正确的错误。但是,如果在类
我在玩弄 PHP 魔法方法(特别是 Property overloading ),并且在进行微基准测试时,遇到了一个我无法解释的怪癖: 看起来一个空体的__set方法比一个有效的方法需要更多的时间来运
如果我有以下注册表类: Class registry { private $_vars; public function __construct() { $th
我正在使用 PHP 实现 OOP 设计。我想知道 PHP 如何处理其神奇方法(如 __get 和 __set)的继承。 class Foo { protected $property1;
我不确定在 PHP 中使用 __get 和 __set 方法有什么值(value)。 这是在数组中设置值的代码。 class myclass { public $sotre = array(); pu
这个问题在这里已经有了答案: PHP Inherited parent method can't access child's private property (3 个答案) 关闭 9 年前。 $
经过一些研究,我最终找到了一个我很快就会在这里问的问题的答案;您如何通过 PHP 中的 __get 和 __set 魔术方法处理数组?每当我尝试使用类似 $object->foo['bar'] = 4
我有一个定制的 MVC PHP 框架,我正在重写它并且对性能和魔术方法有疑问。对于框架的模型部分,我在想如果 __get/__set 魔法方法会导致太多的性能损失而不值得使用。我的意思是访问(读取和写
我正在研究 PHP 中的 OOP,并尝试编写一个基本的 Session 类,它将创建一个 Session 数组。在实例化类时,用户将提供数组的第一维,然后我希望他们能够向该 session 添加任何变
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
PHP 5 引入了魔术方法 __get() 和 __set()。根据我的理解,这是必须编写每个成员的 getter 和 setter 的捷径; $var = $name; } fun
在 OO 编程中,使用魔法方法 __get() 和 __set() 会不会被人看不起,这些会导致类的封装泄漏吗?例如: class User { private $username;
这样做会被认为是好的做法吗... 我的 A 类具有以下定义: class A{ private $_varOne; private $_varTwo; priva
我是一名优秀的程序员,十分优秀!