1
<?phpnamespace _1204;use PDO;//static静态成员//添加类class Db1{ //添加类成员 //静态属性 protected static $pdo; protected static $dsn ='mysql:host=localhost;dbname=zhulaoshi'; protected static $username='zhuge'; protected static $password='123456';// 静态方法 public static function connect() { //在类中访问当前类的静态成员 static::$pdo = new PDO(static::$dsn,static::$username,static::$password); } public static function select() { static::connect(); return static::$pdo->query('select * from `zuser`',PDO::FETCH_ASSOC); }}$result = Db1::select();foreach ($result as $row){ echo '<pre>'.print_r($row).'</pre>';}
2
<?phpnamespace _1204;use PDO;//static静态成员//添加类class Db2{ //添加类成员 //静态属性 protected static $pdo; protected static $dsn ='mysql:host=localhost;dbname=zhulaoshi'; protected static $username='zhuge111111111111111'; protected static $password='1234561111111111111';// 静态方法 public static function connect() { //在类中访问当前类的静态成员 static::$pdo = new PDO(static::$dsn,static::$username,static::$password); } public static function select() { static::connect(); return static::$pdo->query('select * from `zuser`',PDO::FETCH_ASSOC); }}class Sub extends Db2{ protected static $username='zhuge'; protected static $password='123456'; public static function connect() { parent::connect(); // TODO: Change the autogenerated stub }}$result = Sub::select();foreach ($result as $row){ echo '<pre>'.print_r($row).'</pre>';}
MVC
demo1
<?phpnamespace mvc;//1.加载模型(相当于添加类成员)require 'Model.php';//2.加载视图(相当于添加类成员)require 'View.php';//3.创建控制器(相当于访问类成员)class Controller1{ public function index() { $model=new Model(); $data=$model->getdata(); $view=new View(); return $view->fetch($data); }}//4.访问类成员(相当于访问类成员)$controller=new Controller1();echo $controller->index();
demo2
<?phpnamespace mvc;//降低耦合度//1.加载模型(相当于添加类成员)require 'Model.php';//2.加载视图(相当于添加类成员)require 'View.php';//3.创建控制器(相当于访问类成员)class Controller2{ public function index($model,$view) { $data = $model->getdata(); return $view->fetch($data); }}//4.访问类成员(相当于访问类成员)$model = new Model();$view = new View();//将模型对象与师徒对象,以参数的方式注入到控制器的方法中$controller = new Controller2();echo $controller->index($model,$view);
demo3
<?phpnamespace mvc;//降低耦合度//将注入点改到构造方法中//1.加载模型(相当于添加类成员)require 'Model.php';//2.加载视图(相当于添加类成员)require 'View.php';//3.创建控制器(相当于访问类成员)class Controller3{ protected $model; protected $view; public function __construct(Model $model,View $view) { $this->model=$model; $this->view =$view; } public function index() { $data = $this->model->getdata(); return $this->view->fetch($data); }}//4.访问类成员(相当于访问类成员)$model = new Model();$view = new View();//将模型对象与师徒对象,以参数的方式注入到控制器的方法中$controller = new Controller3($model,$view);echo $controller->index();
demo4
<?phpnamespace mvc;//降低耦合度//将注入点改到构造方法中//1.加载模型(相当于添加类成员)require 'Model.php';//2.加载视图(相当于添加类成员)require 'View.php';/**********************************************************///添加服务容器层class Container{ //创建个容器属性,就是个数组 protected $instance=[]; //放进去 public function bind($alias,\Closure $process) { //将类实例化的方法绑定到服务器中 $this->instance[$alias]=$process; } //取出来(执行方法) public function make($alias,$params=[]) { return call_user_func_array($this->instance[$alias],[]); }}//实例化容器$container =new Container();//模型对象,视图对象,绑定到容器中$container->bind('model',function (){return new Model();});$container->bind('view',function (){return new View();});/**********************************************************///3.创建控制器(相当于访问类成员)class Controller4{ public function index(Container $container) { $data = $container->make('model')->getdata(); return $container->make('view')->fetch($data); }}//4.访问类成员(相当于访问类成员)//将模型对象与师徒对象,以参数的方式注入到控制器的方法中$controller = new Controller4();echo $controller->index($container);
demo5
<?php//facade技术;同意了外部对象的调用方式,全部改为静态调用,不管之前的方法是什么类型//laravel,thinkphp全都在用namespace mvc;//1.加载模型(相当于添加类成员)require 'Model.php';//2.加载视图(相当于添加类成员)require 'View.php';/**********************************************************///添加服务容器层class Container1{ //创建个容器属性,就是个数组 protected $instance=[]; //放进去 public function bind($alias,\Closure $process) { //将类实例化的方法绑定到服务器中 $this->instance[$alias]=$process; } //取出来(执行方法) public function make($alias,$params=[]) { return call_user_func_array($this->instance[$alias],[]); }}//实例化容器$container =new Container1();//模型对象,视图对象,绑定到容器中$container->bind('model',function (){return new Model();});$container->bind('view',function (){return new View();});/**********************************************************///添加facade门面类class Facade{ protected static $container =null; protected static $data =[]; //用服务容器给他初始化 public static function Chushihua(Container1 $container) { static::$container=$container; } //用静态代理方式将模型中的getdata()静态化 public static function getdata() { static::$data=static::$container->make('model')->getdata(); } public static function fetch() { return static::$container->make('view')->fetch(static::$data); }}/**********************************************************///3.创建控制器(相当于访问类成员)class Controller5{ public function __construct(Container1 $container) { //调用Facade里面的初始化方法 Facade::Chushihua($container); } public function index() { Facade::getdata(); return Facade::fetch(); }}//4.访问类成员(相当于访问类成员)//将模型对象与师徒对象,以参数的方式注入到控制器的方法中$controller = new Controller5($container);echo $controller->index();
总结:
总结了两个问题,请老师能给回答一下,谢谢,如图
Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:第一个问题解答: 子类中可以用parent引用父类成员!
第二个问题解答: 对象, 数组前面使用类型声明符号, 是php5.6以后支持的新特征, 在php7中, 可声明的变量类型更是扩展到了整数,字符串, 你可以查阅官方手册进行了解