从零开始学设计模式(1):基础编程模式

Introduction

俗话说,“PHP是世界上最好的语言”,因为PHP什么都能干。但是在PHP编程中,你是否会遇到这样的困惑:明明是相同的需求,但是之前写的代码却并不能重用,稍微修改不满足需求,大改又会让页面变样。 是的,由于PHP什么都能干,但是高度灵活性降低了代码的结构性。虽然可以利用三方框架来解决问题,但问题的根本在于缺乏设计模式。 本系列文章将由浅入深的介绍各种设计模式。

面向对象编程

面向对象编程,Object-Oriented Programming(OOP)作为最基本的设计模式并不是什么新鲜的话题,但是大部分新手的PHP编程都是在写流水账,各种拼接字符串,所以这里还是要提一下。 Object-Oriented Programming的概念这里就不说了,毕竟很多人都明白,但是如何在PHP中使用? 假设你需要在页面上显示不同的用户类型,如电脑用户、手机用户等,那么你可以将“显示”这件事抽象为一个类,如:

<?phpclass ShowAgent {  private $agent;  public function __construct() {    $this->agent = $_SERVER['HTTP_USER_AGENT'];    echo $this->agent;  }}$showAgent = new ShowAgent();?>

调试技巧

在很多PHP默认环境中,调试功能是关闭的。打开调试功能又需要配置php.ini文件,其实有一个简单的方法:

<?phpini_set("display_errors", "1");ERROR_REPORTING(E_ALL);?>

将这段代码加入到你的代码中,甚至可以require或者include进去,方便调试。

流水账编程

这里列出流水账编程,并不是让你学习,而是指出何种编程不推荐使用:

<?php$total = "Total number is ";$number = "6";$totalNumber = $total.$number;echo $totalNumber;?>

这段代码并没有错,但是以后再也无法重用了,对吧?每次遇到相同问题,你都需要反复拼接。

面向过程编程

面向过程编程曾经很流行,缺点也是无法维护,例如:

  1. <?php
  2. function showTotal($total, $number) {
  3. $totalNumber = $total.$number;
  4. echo $totalNumber;
  5. }
  6. showTotal("Total number is", "6");
  7. ?>

这段代码同样没有错,但是时间久了,由于缺乏类的概念,showTotal在各种应用场景缺乏灵活性,你还是需要重写代码。

Summary

转变编程的思维需要花费的时间是很长的,但是记住:算法提高程序运行的速度,而设计模式提高编程的速度。

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2016-05-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web前端教室

【学好】前端新人如何能把框架学好?

就是说,基本的js、html、css都ok啦,但前端框架要怎么学习会进度比较快呢?比较笼统的回答当然是要多写多看多练。但是,怎么样做会进度快一点呢?这其中应该也...

562
来自专栏祝威廉

MLSQL如何支持部署SKLearn,Tensorflow,MLLib模型提供API预测服务

部署成API服务时,除了要把raw数据特征化成向量外,研发还要想着怎么加载模型,产生模型的框架五花八门,比如Tensorflow,SKlearn,Spark M...

714
来自专栏专知

Tensorflow Eager Execution入门指南

本文介绍了最新版的Tensorflow 1.7的功能及其使用方法,重点介绍其中最有趣的功能之一eager_execution,它许用户在不创建静态图的情况下运行...

47312
来自专栏机器之心

学界 | 中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷

选自Github 机器之心编译 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了 Easy Machine Learning 系统,其通过交互式图...

2845
来自专栏ATYUN订阅号

【干货】圣诞老人是否真实存在?训练Tensorflow的对象检测API能够告诉你答案

背景:最近我们看到了一篇文章,关于如何用于你自己的数据集,训练Tensorflow的对象检测API。这篇文章让我们对对象检测产生了关注,正巧圣诞节来临,我们打算...

2838
来自专栏CSDN技术头条

好的API都有哪些特点?你能做到几点

好的API是怎样的,应该具备哪些特点,作者对此进行了详细说明,并把API比作产品,主张编写API时从用户的角度换位思考。 如果用户通过他们自己的代码与你的代码进...

1917
来自专栏草根专栏

依赖反转原则DIP 与使用了Repository模式的asp.net core项目结构

DIP 依赖反转原则 Dependency Inversion Principle 的定义如下: 高级别的模块不应该依赖于低级别的模块, 他们都应该依赖于抽象....

2464
来自专栏北京马哥教育

用Python机器学习搞定验证码

写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有...

3797
来自专栏企鹅号快讯

Python开发 的优势在哪里

1.开源 Python都是开源的语言,简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。Python主要是英...

1735
来自专栏机器之心

教程 | 在Cloud ML Engine的TPU上从头训练ResNet

张量处理单元(TPU)是能够大大加快深度学习模型训练速度的硬件加速器。在斯坦福大学进行的独立测试中,在 TPU 上训练的 ResNet-50 模型能够在 Ima...

662

扫描关注云+社区