嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2016-09-18 1121 次浏览 标签 : php反射代码碎片

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

class BaseModel
{
  const XXX = 'test';

  /**
   * 获取子类自定义的常量 ( 不包含父类定义的常量 )
   *
   * @param $class
   * @return array
   */
  static function getConstants($class) {

      $oClass = new \ReflectionClass($class);
      $arr1 = $oClass->getConstants();
      $arr2 = $oClass->getParentClass()->getConstants();

      return array_diff($arr1,$arr2);
  }
}

class ScoreModel extends BaseModel
{
  const RULE_TYPE_ROUND_TABLE_CREATE = 'round_table_create';

  public static function systemOperate(){
    var_dump(self::getConstants(__CLASS__));
  }
}

ScoreModel::systemOperate();
class ScoreModel extends BaseModel
{
  const RULE_TYPE_ROUND_TABLE_CREATE = 'round_table_create';

  private static $score_rule = [];

  private static function scoreRuleInit(){
    $array = [];

    // 本应该从数据库取,这里直接模拟了
    $array[self::RULE_TYPE_ROUND_TABLE_CREATE] = [
        'type' => 1,
        'score' => 10,
        'money' => 10,
        'desc' => '创建圆桌话题'
    ];

    return $array;
  }

  public static function systemOperate($rule_type){
    // 这一步的判断就拦截了一些无意义的类型干扰,防止下面的规则初始化操作
    if (!in_array($rule_type,self::getConstants(__CLASS__))){
        return false;
    }

    if (!isset(self::$score_rule[$rule_type])){
        self::$score_rule = array_merge(self::$score_rule,self::scoreRuleInit());
    }

    var_dump(self::$score_rule);
  }
}

ScoreModel::systemOperate(ScoreModel::RULE_TYPE_ROUND_TABLE_CREATE);


嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表