当前位置:首页 > PHP教程 > php面试题 > 列表

PHP经典面试题之设计模式(经常遇到)

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-20 15:31:55 浏览: 评论:0 

php中设计模式非常多,但是设计模式在php面试题经常会提到,本文主要给大家介绍php经典面试题之设计模式,需要的朋友一起看看吧。

设计模式在面试过程中经常会提到,有时候还会让我们举例说明各种设计模式的应用场景。

使用设计模式可以减轻我们的工作量,优化我们的代码,设计模式非常的多,这里介绍单例模式,工厂模式,组合模式,策略模式4种模式,如果有代码有什么问题或者有更好的方式请告知,谢谢!!!!!

  1. /** 
  2.  * 单例模式 
  3.  * @author YangYang <1812271619@qq.com> 
  4.  * 可以想成在一次http请求中只产生该类的一个对象(即只new classname一次) 
  5.  * 经典的例子是数据库连接(redis,mongodb,memcache等) 
  6.  * 在一次http请求中我们可能需要对数据库做增删改查多条sql操作 
  7.  * 但是如果一次http请求中每执行一条sql我们就mysql_connect(),很明显会导致服务器资源的浪费 
  8.  * 为了节约资源,就可以通过单例模式来实现一次http请求只做一次mysql_connect() 
  9.  * 即将mysql_connect()放在类方法的__construct中,并将__construct方法做成私有, 
  10.  * 这样只能通过getInstance()方法来获得mysql_connect()的资源连接符 
  11.  * getInstance()方法中判断是否已经存在myql连接符,如果存在就直接返回该连接符 
  12.  * 否则new classname()即调用了__construct方法执行了mysql_connect()得到了资源连接符,并返回连接符 
  13.  * 因为现在PHP已不再建议直接使用mysql函数进行数据库操作,而是建议通过PDO进行数据库操作,所以这里写一个简易PDO连接的单例模式 
  14.  * 这里只是讲解单例原理,数据库的防sql注入等问题不做考虑 
  15.  * 准备工作 数据库:test 数据表:user 字段:id name 记录:1 CodeAnti 
  16.  * 最终运行结果: 数据表user中id=1这条记录被删除 
  17.  */ 
  18. class SinglePDO 
  19.     private static $_instance = null; 
  20.     private $_pdo
  21.     //私有,防止外部直接实例化new SinglePDO(...) 
  22.     private function __construct($dsn,$dbUser,$dbPassword
  23.     { 
  24.         try{ 
  25.             $this->_pdo = new PDO($dsn,$dbUser,$dbPassword); 
  26.             $this->_pdo->exec('set names utf8'); 
  27.         }catch(PDOException $e){ 
  28.             die("Error:{$e->getMessage()}"); 
  29.         } 
  30.     } 
  31.     //私有,防止克隆 
  32.     private function __clone(){} 
  33.     //获取连接实例 
  34.     public static function getInstance($dsn,$dbUser,$dbPassword
  35.     { 
  36.         if(self::$_instance === null) 
  37.             self::$_instance = new self($dsn,$dbUser,$dbPassword); 
  38.         return self::$_instance
  39.     } 
  40.     //执行sql 
  41.     public function execSql($sql
  42.     { 
  43.         $result = $this->_pdo->exec($sql); 
  44.         return $result
  45.     } 
  46.  
  47. $dsn = "mysql:host=localhost;dbname=test"
  48. $dbUser = "root"
  49. $dbPassword = ""
  50. $sql = "delete from user where id = 1"
  51. $pdo = SinglePDO::getInstance($dsn,$dbUser,$dbPassword); 
  52. $result = $pdo->execSql($sql); //$pdo->execSql($sql)多次调用,但仍然是同一个pdo对象 
  53. print_r($result);

Tags: PHP经典面试题 PHP设计模式

分享到: