💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
1.同一命名空间或目录下 类的实例化与静态调用,前面不用加目录或“\” ``` Car::pay() new Car new Car() 加上也可以 \Car::pay() new \Car new \Car() ``` 2. php的类里面$this , self , static都可以指向当前类 $this只能用于指向非静态成员 static和self则是指向静态成员 self调用的是声明时所指向的类 也就是父类的方法 static又叫做延迟静态绑定  调用的是最终实例化时所指向的类 示例: $this->a = 2; static::say(); self::say(); 2.5 `new self`和`new static`的区别:两者都是实例化自身,区别在于继承。如果没有继承,则两者返回的实例都是属于一个类;如果有继承,子类调用该方法,`new self`仍然返回原类的实例,而`new static`返回实际子类的实例。这就是延迟静态绑定,static 的值,使用的是最后实际调用那个方法的类 2.6 new this是错误的,因为this是指向当前对象的指针,而不是类的指针 this是指向当前对象的指针(可以看成C里面的指针),self是指向当前类的指针,parent是指向父类的指针 3.单例模式 new static可以被子类继承,new self不能被继承 单例设计模式为了解决在一个应用中只有一个实例【比如数据库实例】,并且禁止clone 复制 在PHP中可以继承单例模式来使用单例模式的特性,避免每次创建一个类都要创建一个对象 ``` class Singleton {     private static $instance;     private function __construct() {}     final protected function __clone() {} #不允许被重写并且会被子类继承 (1)一般单例模式     public static function getInstance()     {         if (! self::$instance instanceof self) {             self::$instance = new self();         }         return self::$instance;     } (2)可以被子类继承 public static function getInstance()     {         if (! static::$instance instanceof static) {             static::$instance = new static(); //static::$instance = new static;可以不带括号         }         return static::$instance;     } } ``` 4.instanceof 使用这个关键字可以确定一个对象是类的实例、类的子类,还是实现了某个特定接口,并进行相应的操作 (1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口。 ``` (1) <?php $obj = new A(); if ($obj instanceof A) {    echo 'A'; } (2) <?php interface ExampleInterface {      public function interfaceMethod();  }  class ExampleClass implements ExampleInterface {      public function interfaceMethod() {          return 'Hello World!';      }  } $exampleInstance = new ExampleClass();  if($exampleInstance instanceof ExampleInterface){      echo 'Yes, it is';  }else{      echo 'No, it is not'; }  ?> 输出结果:Yes, it is ``` 6.**类中接口的应用** interface 是完全抽象的,只能声明方法,而且只能声明 public 的方法,不能声明 private 及 protected 的方法,不能定义方法体,也不能声明实例变量 。然而, interface 却可以声明常量变量 1.关键字:interface 定义接口 (1).类中全部为抽象方法。 (2).抽象方法前不用加abstract。 (3).接口抽象方法属性为public。 (4).成员属性必须为常量。 2.关键字:implements 调用接口 implements主要是对类名,类所拥有的方法,以及所传参数起约束和规范做用 ``` <?php interface Cinema { const film = '加勒比海盗'; public function show(); } class Order implements Cinema { public function show() { echo "影院 接口开放了<br>"; } } $face = new Order(); echo $face->show(); echo Cinema::film; 说明:上面的例子要注意一点,接口的方法名是show,继承接口的类中必须有show这个方法,不然就会报错。也就是说接口的方法是假的,真正起作用的是在继承的类中的方法 ``` 7.self::class 和 static::class获取当前类名 又或者P::class得到p的完整类名 在 PHP 类中,self指向的是当前方法存在的这个类,也就是父类。static指向的是最终那个子类 ``` class P { public static function getParent() { return self::class; } public static function getChild() { return static::class; } } class C extends P { } echo C::getParent(), PHP_EOL; echo C::getChild(), PHP_EOL; 运行结果:P,C ```