编程语言
首页 > 编程语言> > ModernPhp笔记(1)

ModernPhp笔记(1)

作者:互联网

  1.命名空间-namespace

   作用:区别不通文件中的相同类名。

     例子:有两个文件,ClassA.php,ClassB.php。两个文件中都有一叫做work的类。将两个文件引入之后想要实例化ClassA.php中的work

 1   //---------------ClassA.php---------------//
 2   <?php
 3   namespace ClassA;
 4   class work {
 5       public function __construct() {
 6           echo 'this is class A';
 7       }
 8   }
 9   
10  
11  //---------------ClassB.php---------------//
12  <?php
13  namespace ClassB;
14  class work {
15      public function __construct() {
16          echo 'this is class B';
17      }
18  }
19 
20  //---------------Run.php---------------//
21  <?php
22  require 'ClassA.php';
23  require 'ClassB.php';
24 
25  new \ClassA\work();

  

  2.命名空间-use

   作用:实例化的时候太长。

     例子:多次实例化work的时候,每次都要new \ClassA\work();如果命名空间还比较长的话每次都要打很长一串。

1 <?php
2 require 'ClassA.php';
3 require 'ClassB.php';
4 
5 use ClassA\work;
6 
7 new work();

  

  3.命名空间-use as

   作用:别名,实例化两个同名的类

1 <?php
2 require 'ClassA.php';
3 require 'ClassB.php';
4 
5 use ClassA\work as w1;
6 use ClassB\work as w2;
7 
8 new w1();
9 new w2();

 

  4.抽象类与接口类

    作用:接口类起到一个规范的作用;抽象类父类只是抽象一个功能,由子类具体实现。起到规范作用的同时还会执行。

 1 <?php
 2 abstract class fruit {
 3     public function say() {
 4         echo 'my color: ' . $this->getColor();
 5     }
 6     
 7     abstract function getColor();
 8 }
 9 
10 class banana extends fruit {
11     public function getColor() {
12         return 'yellow';
13     }
14 }
15 
16 class apale extends fruit {
17     public function getColor() {
18         return 'red';
19     }
20 }
21 
22 $apale = new apale();
23 $apale->say();

 

  5.性状

    作用:两个完全不相关的类(不适合使用继承),有一部分重合功能。use本质上就相当于把性状的类粘贴过来。

 1 <?php
 2 trait repeat {
 3     protected $v = 'v';
 4     protected function test() {
 5         echo 'this is test';
 6     }
 7 }
 8 
 9 class classA {
10     use repeat;
11     public function __construct() {
12         echo $this->v;
13         $this->test();
14     }
15 }
16 
17 $a = new ClassA();

  6.生成器

    作用:如例子1,foreach每迭代一次,for执行一次,返回一个值。对比例子2占用内存少很多。但是缺点是不能更改也不能存储。只能生成数据。

 1 <?php
 2 
 3 //例子1
 4 function generator() {
 5     for ($i=0; $i<10; $i++) {
 6         echo '-';
 7         yield $i;
 8     }
 9 }
10 
11 foreach (generator() as $v) {
12     echo $v;
13 }
14 
15 //例子2
16 
17 function test() {
18     for ($i=0; $i<10; $i++) {
19         echo '-';
20         $res[] = $i;
21     }
22     return $res;
23 }
24 
25 foreach (test() as $v) {
26     echo $v;
27 }

 

  7.闭包

 1 <?php
 2 
 3 //-------使用-------
 4 
 5 $add = 1;
 6 $arr = array_map(function($v) use ($add) {
 7     return $v + $add;
 8 }, [1, 2, 3]);
 9 
10 
11 //——-----判断是否是匿名函数——-----
12 
13 function check($param) {
14     if ($param instanceof \Closure) {
15         return true;
16     }
17 }
18 
19 //——-----bindTo——-----
20 
21 class App {
22     protected $routes = array();
23     protected $responseBody;
24     
25     public function addRoute($routePath, $routeCallBak) {
26         $this->routes[$routePath] = $routeCallBak->bindTo($this, __CLASS__);
27     }
28     
29     public function dispatch($currentPath) {
30         foreach ($this->routes as $routhPath => $callBak) {
31             if ($routhPath == $currentPath) {
32                 $callBak();
33                 break;
34             }
35         }
36         echo $this->responseBody;
37     }
38 }
39 
40 $app = new App();
41 $app->addRoute('user/add', function() {
42     $this->responseBody = json_encode(['name' => 'Alan']);
43 });
44 
45 $app->dispatch('user/add');

 

  

 

标签:function,getColor,work,apale,笔记,ClassA,new,ModernPhp
来源: https://www.cnblogs.com/wangjianheng/p/12030058.html