我个人倡导一个项目尽量统一使用规范以及编码风格
我相信各位大佬都像是ThinkPhp和Laravel等框架的作者那样,希望自己写的类符合大部分人的使用习惯
接口介绍 - ArrayAccess
让你能以数组的形式访问对象的接口
接口实现
/**
* 创建User类 实现ArrayAccess接口 必须实现 ArrayAccess接口的全部方法
*/
class User implements \ArrayAccess
{
public $name = ''; // 姓名
public $age = 0; // 年龄
private $sex = ''; // 性别
public function __construct($name, $age, $sex)
{
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
/** 使用 isset方法时调用
* @param mixed $offset 数组key
*/
public function offsetExists($offset)
{
//return property_exists($this, $offset); // 这种写法 unset已定义的属性还是返回true
return isset($this->$offset);
}
/** 数组取值时调用
* @param mixed $offset 数组key
*/
public function offsetGet($offset)
{
return $this->$offset;
}
/** 数组赋值时调用
* @param mixed $offset 数组key
*/
public function offsetSet($offset, $value)
{
$this->$offset = $value;
}
/** 使用 unset方法时调用
* @param mixed $offset 数组key
*/
public function offsetUnset($offset)
{
unset($this->$offset);
}
}
使用效果
// 引入类文件
require 'User.php';
// 实例化并初始化熟悉值
$user = new User('李白', 108, '男');
var_dump($user->name); // 输出 "李白"
var_dump($user['name']); // 输出 "李白"
var_dump($user->age); // 输出 108
var_dump($user['age']); // 输出 108
var_dump(isset($user['name'])); // 输出 true
var_dump(isset($user['height'])); // 输出 false
unset($user['name']);
var_dump(isset($user['name'])); // 返回 false
$user['height'] = 178;
var_dump($user['height']); // 返回 178
var_dump(isset($user['height'])); // 返回 true
// 还能操作私有熟悉
var_dump($user['sex']); // 返回 男
总结
各方法内部实现方式可以按需发挥,文章只是列举了个简单的例子
谢谢各位大佬观看,点个赞呗
评论