Thinkphp 5.0 的代码我真是没法说了 太渣了吧 写框架的人不懂 OOP 思想?

2016 年 12 月 18 日
 1762628386

/** * 验证单个字段规则 * @access protected * @param string $field 字段名 * @param mixed $value 字段值 * @param mixed $rules 验证规则 * @param array $data 数据 * @param string $title 字段描述 * @param array $msg 提示信息 * @return mixed */ protected function checkItem($field, $value, $rules, $data, $title = '', $msg = []) { if ($rules instanceof \Closure) { // 匿名函数验证 支持传入当前字段和所有字段两个数据 $result = call_user_func_array($rules, [$value, $data]); } else { // 支持多规则验证 require|in:a,b,c|... 或者 ['require','in'=>'a,b,c',...] if (is_string($rules)) { $rules = explode('|', $rules); } $i = 0; foreach ($rules as $key => $rule) {

            if ($rule instanceof \Closure) {
                $result = call_user_func_array($rule, [$value, $data]);
            } else {
                // 验证
                if (is_numeric($key)) {
                    if (strpos($rule, ':')) {
                        list($type, $rule) = explode(':', $rule, 2);
                        if (isset($this->alias[$type])) {
                            // 判断别名
                            $type = $this->alias[$type];
                        }
                        $info = $type;
                    } elseif (method_exists($this, $rule)) {
                        $type = $rule;
                        $info = $rule;
                        $rule = '';
                    }else {
                        $type = 'is';
                        $info = $rule;
                    }
                } else {
                    $info = $type = $key;
                }

                // 如果不是 require 有数据才会行验证
                if (0 === strpos($info, 'require') || (!is_null($value) && '' !== $value)) {
                    // 验证类型
                    $callback = isset(self::$type[$type]) ? self::$type[$type] : [$this, $type];
                    // 验证数据
                    $result = call_user_func_array($callback, [$value, $rule, $data, $field]);
                } else {
                    $result = true;
                }
            }

            if (false === $result) {
                // 验证失败 返回错误信息
                if (isset($msg[$i])) {
                    $message = $msg[$i];
                    if (is_string($message) && strpos($message, '{%') === 0) {
                        $message = (substr($message, 2, -1));
                    }
                } else {
                    $message = $this->getRuleMsg($field, $title, $info, $rule);
                }
                return $message;
            } elseif (true !== $result) {
                // 返回自定义错误信息
                return $result;
            }
            $i++;
        }
    }
    return true !== $result ? $result : true;
}

我的天 这是啥~

尤其是下面这几行代码 我感觉要是在公司里写类似的 会被别人打死的

if (is_numeric($key)) { if (strpos($rule, ':')) { list($type, $rule) = explode(':', $rule, 2); if (isset($this->alias[$type])) { // 判断别名 $type = $this->alias[$type]; } $info = $type; } elseif (method_exists($this, $rule)) { $type = $rule; $info = $rule; $rule = ''; }else { $type = 'is'; $info = $rule; } } else { $info = $type = $key; }

13624 次点击
所在节点    PHP
115 条回复
sagaxu
2016 年 12 月 18 日
@wy315700 ==少写个=,现代编译器和 IDE 都会提示的,根本就不是个事
vugusurk
2016 年 12 月 18 日
@kancloud 撕逼云快来
wy315700
2016 年 12 月 18 日
@sagaxu
不是所有人都喜欢用 IDE 的
chocotan
2016 年 12 月 18 日
楼主的看法先不说,
下面回复里的“你行你上”这种逻辑错误的话居然还能从一个程序员的嘴里说出来,真是匪夷所思
1762628386
2016 年 12 月 18 日
@chocotan 程序员的门槛越来越低了
minamike
2016 年 12 月 18 日
程序员有什么门槛
程序员不就是你行你上么
看不上人家写的就自己写呗(手动滑稽
scyuns
2016 年 12 月 18 日
你还小 ,孩子 。
等你多写个几年你就明白他们为什么那样写了!!
小时候梦想改变世界的人不是只有你一个。
但现实却是你必须被世界改变你才能被世界世界认可。
1762628386
2016 年 12 月 18 日
@scyuns 对方拒绝,并打翻了你这碗毒鸡汤~
1762628386
2016 年 12 月 18 日
@yxzblue 那你说说为什么他们为什么这样写(手动斜眼)
congeec
2016 年 12 月 18 日
@chocotan 感觉是被直呼带坏了
说话内容的对与错、说话的权利,这两者的区别不知道大家看不看得见。
1762628386
2016 年 12 月 18 日
@scyuns 是不是因为他们看清了这个世界,顺便叹了口气:唉 社会就是这样 (手动滑稽)
quericy
2016 年 12 月 18 日
@holyghost @misaka20038numbe @realpg
怎么都在吐槽 true 放左边....问题不应该是:
return true !== $result ? $result : true;

return $result;
有毛区别....
mokeyjay
2016 年 12 月 18 日
等等,这楼貌似刚开始就歪了啊…… LZ 表示没人理他他很伤心啊
说回来,要说规范和优雅,可以去看 Laravel 啊,不过就是性能……
要是觉得 TP 不好可以吐槽,如果希望它变好可以 PR
毕竟程序猿的本质就是“你行你上”,世界就是因为这个准则而越来越美好
1762628386
2016 年 12 月 18 日
@mokeyjay 呀 终于有点存在感了
holyghost
2016 年 12 月 18 日
@quericy 我也不知道,好像他们还不知道有个东西叫 IDE ?少写一个=又能怎么样。。。
xcodebuild
2016 年 12 月 18 日
@des
@chocotan
个人观点:作为品尝饭菜的人当然可以说厨师烧得不好吃(即使你不会烧菜),但是如果同为厨师,烧不出更好的菜去喷别的厨师烧得不好吃就不太好了。
21grams
2016 年 12 月 18 日
写出来就行,怎么写是次要的。
Syc
2016 年 12 月 18 日
@sagaxu 我从不用 IDE ……简简单单的 Vim 多好
fthvgb1
2016 年 12 月 18 日
return true !== $result ? $result : true;
fthvgb1
2016 年 12 月 18 日
这个判断有意义么,横竖都返回 true

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/328375

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX