Selaa lähdekoodia

add some code

王刚 3 vuotta sitten
vanhempi
commit
6c2e5bc0be

+ 24 - 6
Gameserver/Amfphp/base/Object_ext.php

@@ -6,6 +6,8 @@ namespace loyalsoft;
  * 扩展对象的一些通用方法
  * 使用方法: $var = new XX($obj); ... 用完后注意进行回存.(相当于克隆一个原始对象,若需覆盖原始对象记得回存操作)
  * @version
+ *          1.0.3 增加了Json()和MD5()方法,用于计算对象的摘要,方便与客户端或者存储端进行校验. --gwang 2022.5.31
+ *          1.0.2 增加了LoadFrom()方法. --gwang 2020.4.24
  *          1.0.1 改名, PHP 7以后的语法中已经将Object作为关键字 --gwang 2017年8月2日
  *          1.0.0 Created at 2017-3-28. by --gwang
  * @author gwang (mail@wanggangzero.cn)
@@ -18,7 +20,7 @@ class Object_ext {
      * Ps. 不会进行递归类型检查, php的serilize函数也没有附带字段的类型信息
      */
     function __construct($arg = null) {
-        if (func_num_args() != 1 || is_null($arg)) {
+        if (func_num_args() != 1 || is_null($arg)) {                            # 若参数为null,无特殊操作
             return;
         }
         $para = is_array($arg) ? $arg : (array) $arg;                           # 关联数组
@@ -33,26 +35,42 @@ class Object_ext {
      * @param array/Object $obj
      */
     public function LoadFrom($obj) {
-        if (func_num_args() != 1 || is_null($obj)) {
+        if (func_num_args() != 1 || is_null($obj)) {                            # 防御: 参数数量不对
             die("too many args or arg obj was null!");
         }
         $para = is_array($obj) ? $obj : (array) $obj;                           # 转关联数组
         $vars = get_class_vars(get_class($this));                               # 后期绑定,获得实例的实际类名称=>属性数组
         foreach ($vars as $name => $value) {
             if (isset($para[$name])) {
-                $this->$name = $para[$name];         # 取参数中的或者默认值
+                $this->$name = $para[$name];                                    # 取参数中的或者默认值
             }
         }
         return $this;
     }
 
-    public function __toString() {
+    public function __toString() {                                              # 用json_encode覆盖下toString()方法
         return $this->toString();
     }
 
-    public function toString() {
-        $str = JsonUtil::encode($this);
+    /**
+     * @return 将自身数据序列化为json串.
+     */
+    public function Json() {
+        return JsonUtil::encode($this);
+    }
+
+    public function toString() {                                                # 还没想好要不要留一个显式的toString()方法
+        $str = $this->Json();
         return $str;
     }
 
+    /**
+     * @param bool $lower 是否返回小写字符串,默认值false, 返回大写字符串
+     * @return string 计算自身数据序列化为json串后的MD5值(大写16进制)
+     */
+    public function MD5($lower = false) {
+        $str = $this->Json();
+        return $lower ? md5($str) : strtoupper(md5($str));
+    }
+
 }

+ 2 - 2
Gameserver/Amfphp/base/Resp.php

@@ -40,7 +40,7 @@ class Resp extends Object_ext {
     public $tag;
 
     /**
-     * 产生服务端应答
+     * 产生服务端成功应答数据
      * @param Req $req
      * @param assoc Array $ret
      * @return \ResponseVo
@@ -55,7 +55,7 @@ class Resp extends Object_ext {
     }
 
     /**
-     *
+     * 产生服务端错误应答数据
      * @param Req $req
      * @param int $err
      * @param string $msg 【可选】附加信息

+ 3 - 3
Gameserver/Amfphp/index.php

@@ -83,7 +83,7 @@ class Index {
             $rt->end();                                                         # 计时器结束
             $ms = round($rt->getRenderTime(false) / 1000, 2);                   # 耗时换算成毫秒
             $msi = $ms > 50 ? "<font color='red'>$ms</font>" : $ms;             # 超过50ms用红色显示
-            self::$debugMsg .= "<br/>逻辑耗时: $msi 毫秒";                       # 逻辑耗时
+            self::$debugMsg .= "<br/>逻辑耗时: $msi 毫秒";                        # 逻辑耗时
             self::$debugMsg .= '<br/>内存分配:' . number_format(memory_get_peak_usage() / 1024) . 'kb,';
             self::$debugMsg .= '内存占用:' . number_format(memory_get_usage() / 1024) . 'kb';  # 内存使用数量(kb)
         }
@@ -130,12 +130,12 @@ class Index {
         if (ErrCode::ok === $err) {
             CLog::err("Err()方法的参数err==ok, 那你还调个蛋的Err()!!!");
         }
-        if (Index::$isDebugging) {                                                  # 组织调试信息       
+        if (Index::$isDebugging) {                                              # 组织调试信息       
             Index::$debugMsg .= "<br/><font color='red'>发生错误逻辑中断($err):$msg</font>"; # 错误信息用红色显示    
             Index::$debugMsg .= '<br/>内存分配:' . number_format(memory_get_peak_usage() / 1024) . 'kb,';
             Index::$debugMsg .= '内存占用:' . number_format(memory_get_usage() / 1024) . 'kb';  # 内存使用数量(kb) 
         }
-        if (is_string($err)) {                                                      # 防御Err中直接输入字符串的货
+        if (is_string($err)) {                                                  # 防御Err中直接输入字符串的货
             $msg = "发生错误($err)直接中断逻辑执行." . $msg;
             CLog::err($msg);
             $err = ErrCode::err_innerfault;

+ 29 - 1
Gameserver/Amfphp/test.php

@@ -14,5 +14,33 @@ echoLine("tsDay:" . totalDays());
 //set_time_limit(15);                                                           # 设置执行超时时间
 //
 
- 
+class Mock extends Object_ext {
 
+    public $Sex;
+    public $Age;
+    public $Name;
+
+}
+
+class MockB extends Object_ext {
+
+    public $Name;
+    public $Age;
+    public $Sex;
+
+}
+
+$a = JsonUtil::decode('{"Sex":"F","Age":37,"Name":"王刚"}');
+
+var_dump($a);
+var_dump(JsonUtil::encode($a));
+
+$ma = new Mock($a);
+var_dump($ma);
+var_dump(JsonUtil::encode($ma));
+var_dump($ma->MD5());
+
+$mb = new MockB($a);
+var_dump($mb);
+var_dump(JsonUtil::encode($mb));
+var_dump($mb->MD5());