资讯专栏INFORMATION COLUMN

优化你的PHP代码,从现在做起

impig33 / 2617人阅读

摘要:前言我一生的文章都会放在这里,我的博客,我希望每一行代码,每一段文字都能帮助你。大家好,我是,今天我们不聊工具规范等等等等的辅助,就聊一下该如何写一段好的代码,本文以我的职业生涯碰到的代码为例,如有出入请在评论区提出异议,谢谢。

前言
我一生的文章都会放在这里,我的博客,我希望每一行代码,每一段文字都能帮助你。https://github.com/CrazyCodes...

大家好,我是CrazyCodes ,今天我们不聊工具、规范等等等等的辅助,就聊一下该如何写一段“好”的代码,本文以我的职业生涯碰到的代码为例,如有出入请在评论区提出异议,谢谢。

搜索功能

搜索很常见,复杂的搜索大多出行在后台,举个栗子,大概需求是这样的

这是一个后台用户列表的搜索功能

搜索条件 可否并行 是否必填
用户名 可以
手机号码 可以
是否已认证 可以
用户性别 可以
最近登录时间 可以
账户余额 可以
初学者代码

看到这些例子你是否不由的一颤,又要开始造轮子的是不是?
以原生的例子为例,开始你可能会这样写(以下为伪代码)

if (IS_POST) {
    $like = "";
    if (isset($_POST["username"])) {
        $username = $_POST["username"];
        $like .= "username like "%" . $username . "%" and ";
    }

    if (isset($_POST["phone"])) {
        $phone = $_POST["phone"];
        $like .= "phone like "%" . $phone . "%" and";

    }

    if ($_POST["is_auth"]) {
        $isAuth = $_POST["is_auth"];
        $like .= "is_auth like "%" . $isAuth . "%" and";

    }

    if ($_POST["sex"]) {
        $sex = $_POST["sex"];
        $like .= "sex like "%" . $sex . "%" and";
    }


    if ($_POST["time"]) {
        $time = $_POST["time"];
        $like .= "time like "%" . $time . "%" and";
    }


    if ($_POST["wallet"]) {
        $wallet = $_POST["wallet"];
        $like .= "wallet like "%" . $wallet . "%" and";

    }

    $like = rtrim($like, "and");

    $sql = "SELECT * FROM `user` WHERE {$like}";


} else {
    return view("user");
}
封装

恩...,还不错,结构清晰,传统的初学者条型代码,接下来我们先封装一下几块代码。

function post($param)
{
    return isset($_POST[$param]) ? $_POST[$param] : null;
}

if (IS_POST) {
    $like = "";
    if (post("username")) {
        $username = post("username");
        $like .= "username like "%" . $username . "%" and ";
    }

    if (post("phone")) {
        $phone = post("phone");
        $like .= "phone like "%" . $phone . "%" and";

    }

    if (post("is_auth")) {
        $isAuth = post("is_auth");
        $like .= "is_auth like "%" . $isAuth . "%" and";

    }

    if (post("sex")) {
        $sex = post("sex");
        $like .= "sex like "%" . $sex . "%" and";
    }


    if (post("time")) {
        $time = post("time");
        $like .= "time like "%" . $time . "%" and";
    }


    if (post("wallet")) {
        $wallet = post("wallet");
        $like .= "wallet like "%" . $wallet . "%" and";

    }

    $like = rtrim($like, "and");

    $sql = "SELECT * FROM `user` WHERE {$like}";


} else {
    return view("user");
}
适当使用迭代

恩,至少我们可以自由控制post方法了,但是这类过程化代码维护性太低,我们再改进下

function post($param)
{
    return isset($_POST[$param]) ? $_POST[$param] : false;
}

function postAll()
{
    return $_POST;
}

if (IS_POST) {
    $like = "";


    foreach (postAll() as $key => $value) {
        if (post($key)) {
            $like .= "{$key} like "%{$value}%" and";
        }
    }

    $like = rtrim($like, "and");

    $sql = "SELECT * FROM `user` WHERE {$like}";


} else {
    return view("user");
}
面向对象

加个迭代代码看起来还算是整洁了点,作为PHP程序员,写代码不面向对象不靠谱,把class加上

function request($param = null)
{
    return new Request($param);
}

class Request
{
    public function __construct(string $param = null)
    {
        return isset($_POST[$param]) ? $_POST[$param] : false;
    }

    public function all()
    {
        return $_POST;
    }
}


class User
{
    public function index()
    {
        if (IS_POST) {
            $like = "";

            foreach (request()->all() as $key => $value) {
                if (request($key)) {
                    $like .= "{$key} like "%{$value}%" and";
                }
            }

            $like = rtrim($like, "and");

            $sql = "SELECT * FROM `user` WHERE {$like}";

        } else {
            return view("user");
        }
    }
}
对User的改造

我们在对User的类进行改造,做一些判断及筛选

function request($param = null)
{
    return new Request($param);
}

class Request
{
    public function __construct(string $param = null)
    {
        return isset($_POST[$param]) ? $_POST[$param] : false;
    }

    public function all()
    {
        return $_POST;
    }
}


class User
{
    public $request = [
        "username",
        "phone",
        "is_auth",
        "sex",
        "time",
        "wallet"
    ];

    public function index()
    {
        if (IS_POST) {
            $like = "";

            foreach (request()->all() as $key => $value) {
                if (in_array($key, $this->request) && request($key)) {
                    $like .= sprintf("%s like %s and", $key, $value);
                }
            }

            $like = rtrim($like, "and");

            $sql = "SELECT * FROM `user` WHERE {$like}";

        } else {
            return view("user");
        }
    }
}

这就差不多了,对比真是的代码可能还相差甚远,我写这篇文章的目的不是教会你如何写代码,是想说明编码不是一次性的,应经过多次修改,使代码具有可维护性,扩展性等等的,各种“性”

致谢

感谢你看到这里,希望本篇文章可以帮到你,谢谢

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31573.html

相关文章

  • 如何成为专业的PHP开发者

    摘要:如何才能成为一名专业的开发者资深开发者在其博客上分享了一些心得。要想成为一个专业的程序员,首先要成为一个中级程序员。永远不要低估陪伴的力量结论当你专注于实践上面所提到各种方法的时候,你就在成为专业开发者的路上。 如何才能成为一名专业的PHP开发者?资深Web开发者Bruno Skvorc在其博客上分享了一些心得。 showImg(http://segmentfault.com/img...

    617035918 评论0 收藏0
  • Functional CSS: 试着改进可重用CSS做起

    摘要:从试着改进可重用做起泊学视频回想起每次更新泊学网站,最让我头疼的,就是改写。于是我几乎不假思索的写出了这样的模板它同样包含了一个封面图,一个标题和一个简介。 从试着改进可重用CSS做起 泊学4K视频 回想起每次更新泊学网站,最让我头疼的,就是改写CSS。在不同的阶段,对CSS不断深入的理解,对网站内容的调整,对UI的重用需求,都影响着CSS的编写方式,因此,稍不留神,你的代码理解就会充...

    microelec 评论0 收藏0
  • 转:框架看PHP的五种境界及各自的薪资待遇

    摘要:语言行为及特征状态看不懂任何英语技术,英语文档,凡事没有培训部在搞的,只有英文文档的东西国内一律没大公司在用,都非主流,排斥英文文档和新技术,以及各种超出他学习能力范围的技术。 在撰写此文前首先必须申明的是本人不鄙视任何一种框架,也无意于挑起PHP框架间的战争,更没有贬低某个框架使用者的用意,本文纯粹个人的看法。你可以认为我无知也好,或者装逼也好,请不要试着在任何情况下,随便发起言语的...

    Godtoy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<