class Student implements ArrayAccess
{
/** @var int 为了实现foreach 获取参数 而设置 */
private $key = 0;
private $current = 0; //当前所指向的指针
public $param = [];
public function __construct(string $name, int $age)
{
$this->param['name'] = $name;
$this->param['age'] = $age;
}
/**
* 修改器 设置数据对象的值
* @access public
* @param string $name 名称
* @param mixed $value 值
* @return void
*/
public function __set($name, $value)
{
$this->param[$name] = $value;
}
/**
* 获取器 获取数据对象的值
* @access public
* @param string $name 名称
* @return mixed
*/
public function __get($name)
{
return $this->param[$name] ?? null;
}
/**
* 当对不可访问属性调用,isset 或 empty的时候 调用__isset
* __isset
* @param $name
* @return bool
*
* @author songyz
* @date 2020/2/2 22:33
*/
public function __isset($name)
{
return isset($this->param[$name]);
}
/**
* 当在类外部使用unset()函数来删除私有成员时自动调用的
* __unset
* @param $name
*
* @author songyz
* @date 2020/2/2 22:43
*/
public function __unset($name)
{
unset($this->param[$name]);
}
/**
* @inheritDoc
*/
public function offsetExists($offset)
{
return $this->__isset($offset);
}
/**
* @inheritDoc
*/
public function offsetGet($offset)
{
return $this->__get($offset);
}
/**
* @inheritDoc
*/
public function offsetSet($offset, $value)
{
$this->__set($offset, $value);
}
/**
* @inheritDoc
*/
public function offsetUnset($offset)
{
$this->__unset($offset);
}
/**
* echo $stu['name']; //实现这种方式获取参数
* // ArrayAccess
* public function offsetExists($offset)
* {
* return array_key_exists($offset, $this->items);
* }
*
* public function offsetGet($offset)
* {
* return $this->items[$offset];
* }
*
* public function offsetSet($offset, $value)
* {
* if (is_null($offset)) {
* $this->items[] = $value;
* } else {
* $this->items[$offset] = $value;
* }
* }
*
* public function offsetUnset($offset)
* {
* unset($this->items[$offset]);
* }
*/
//
// /**
// * 返回当前指针的值
// * @inheritDoc
// */
// public function current()
// {
// return $this->param[$this->current];
// }
// /**
// * 设置下次指针
// * @inheritDoc
// */
// public function next()
// {
// ++$this->current;
// // TODO: Implement next() method.
// }
//
// /**
// * 返回当前指针
// * @inheritDoc
// */
// public function key()
// {
// return $this->current;
// }
//
// /**
// * @inheritDoc
// */
// public function valid()
// {
// return isset($this->param[$this->current]);
// // 验证当前指针的值是否存在
// }
//
// /**
// * 指针的重置
// * @inheritDoc
// */
// public function rewind()
// {
// $this->key = 0;
// }
}
调用实例:
$stu = new Student('james', '12');
//
//echo $stu->name . ' ' . $stu->age;
//
//var_dump(isset($stu->address)); //或触发__isset 方法
//var_dump(isset($stu->name)); //或触发__isset 方法
//
//print_r($stu->param);
//echo $stu['name'];
foreach ($stu as $key => $val) {
var_dump($key);
var_dump($val);
// echo $key . '=' . $val . "\n";
}