Spl标准库 - SplBean

优质
小牛编辑
116浏览
2023-12-01

SplBean是一个抽象类,借以实现类似Java Bean中半自动化ORM。
例如在java中常见的:

  1. $db->insert('user_table',$bean->toArray());

当用户需要Bean层时,只需要新建对应的Bean class并继承CoreComponentSplSplBean实现其initialize()。

  1. class UserBean extends CoreComponentSplSplBean {
  2. protected $account;
  3. protected $sex;
  4. protected $addTime;
  5. /**
  6. * @return mixed
  7. */
  8. public function getAccount()
  9. {
  10. return $this->account;
  11. }
  12. /**
  13. * @param mixed $account
  14. */
  15. public function setAccount($account)
  16. {
  17. $this->account = $account;
  18. }
  19. /**
  20. * @return mixed
  21. */
  22. public function getSex()
  23. {
  24. return $this->sex;
  25. }
  26. /**
  27. * @param mixed $sex
  28. */
  29. public function setSex($sex)
  30. {
  31. $this->sex = $sex;
  32. }
  33. /**
  34. * @return mixed
  35. */
  36. public function getAddTime()
  37. {
  38. return $this->addTime;
  39. }
  40. /**
  41. * @param mixed $addTime
  42. */
  43. public function setAddTime($addTime)
  44. {
  45. $this->addTime = $addTime;
  46. }
  47. protected function initialize()
  48. {
  49. // TODO: Implement initialize() method.
  50. $this->addTime = time();
  51. }
  52. }

使用

  1. $bean = new UserBean(
  2. array(
  3. 'account'=>"account",
  4. 'sex'=>0,
  5. 'other'=>'other'
  6. )
  7. );
  8. var_dump($bean->toArray());
  9. array(3) {
  10. ["account"]=>
  11. string(7) "account"
  12. ["sex"]=>
  13. int(0)
  14. ["addTime"]=>
  15. int(1504024995)
  16. }

Bean对象在实例化时,可以选择性的传递一个数组作为Bean对象初始化参数,Bean对象会自动过滤无关的键值对。

注意事项

  • 每个Bean必须实现initialize方法,该方法在Bean实例被创建时执行,用于为Bean某些成员变量做初始化设定。该方法中若对成员属性进行赋值,其优先级是最高的。
    因此若需要保留在实例化对象时传入的属性值,请做判断再赋值。例如:
    1. protected function initialize()
    2. {
    3. // TODO: Implement initialize() method.
    4. if(emptye($this->addTime)){
    5. $this->addTime = time();
    6. }
    7. }
  • 成员变量请确保全部为protected,并实现其get/set方法。
  1. $bean->setSex(null);
  2. var_dump($bean->toArray(false,['account','sex']));
  3. array(2) {
  4. ["account"]=>
  5. string(7) "account"
  6. ["sex"]=>
  7. NULL
  8. }
  9. var_dump($bean->toArray(UserBean::FILTER_TYPE_NOT_NULL,['account','sex']));
  10. array(1) {
  11. ["account"]=>
  12. string(7) "account"
  13. }
  14. $bean->setSex('');
  15. var_dump($bean->toArray(UserBean::FILTER_TYPE_NOT_EMPTY));
  16. array(2) {
  17. ["account"]=>
  18. string(7) "account"
  19. ["addTime"]=>
  20. int(1504025589)
  21. }

在将Bean对象转数组的时候,可以选择Bean对象中的指定字段进行导出,以及对字段值未NULL或者是为空的进行过滤。