多态性理解:多态-在面向对象中,指某种对象实例的不同表现形式
<?php
abstract class Ploymorphism{
public abstract function go();
}
class A extends Ploymorphism{
public function go()
{
echo "我是A类";
}
}
class B extends Ploymorphism{
public function go()
{
echo "我是B类";
}
public function go2(){
echo "go************";
}
}
class C{
public static function testPloymorphism(Ploymorphism $ploymorphism){
$ploymorphism->go();
}
}
C::testPloymorphism(new A());
C::testPloymorphism(new B());
$b = new B();
$b->go2();
工厂模式(未遵循// 在面向对象设计中开闭原则,修改是封闭的,扩展是开放的)
<?php
interface db{
function conn();
}
class dbmysql implements db{
public function conn(){
echo "连上了mysql";
}
}
class dbsqllite implements db{
public function conn(){
echo "连上了sqllite";
}
}
class dboracle implements db{
public function conn(){
echo "连上了oracle";
}
}
class Factory{
public static function createDb($type){
if($type == "mysql"){
return new dbmysql();
}elseif ($type == 'sqlise'){
return new dbsqllite();
}elseif ($type == 'oracle'){
return new dboracle();
}else{
throw new Exception("ERROR DB TYEP",1);
}
}
}
$mysql = Factory::createDb("mysql");
$mysql->conn();
$sqllite = Factory::createDb("sqlise");
$sqllite->conn();
$sqloracle = Factory::createDb("oracle");
$sqloracle->conn();
工厂模式(遵循开闭原则)
<?php
interface db{
public function conn();
}
class dbmysql implements db{
public function conn()
{
echo "连接-mysql";
}
}
class dbsqlite implements db{
public function conn()
{
echo "连接-sqlite";
}
}
interface dbfactory{
public static function createDb();
}
class mysqlfactory implements dbfactory{
public static function createDb()
{
return new dbmysql();
}
}
class sqlitefactory implements dbfactory{
public static function createDb()
{
return new dbsqlite();
}
}
$mysql = mysqlfactory::createDb();
$mysql->conn();
$sqlite = sqlitefactory::createDb();
$sqlite->conn();
class dboracle implements db{
public function conn()
{
echo "连接-oracle";
}
}
class oraclefactory implements dbfactory{
public static function createDb()
{
return new dboracle();
}
}
$oracle = oraclefactory::createDb();
$oracle->conn();
单例模式
<?php
class signle{
protected static $ins=null;
public static function getins(){
if(self::$ins===null){
self::$ins = new self();
}
return self::$ins;
}
final protected function __construct()
{
}
final protected function __clone()
{
}
}
$s1 = signle::getins();
$s2 = signle::getins();
var_dump($s1);
var_dump($s2);