php基础-5

 

 php的面相对象

  •  1 <?php
     2 
     3 
     4 class Hello
     5 {
     6     public function say_hello()
     7     {
     8         echo "hello";
     9     }
    10 }
    11 
    12 $say = new Hello();
    13 $say->say_hello();

    先使用关键字class创建一个Hello类,在类里面写一个公开的方法say_hello().

          在外部调用的时候直接用关键字new 接类名然后在用一个变量接收,这样就完成了一个类的实例化。接下来这个变量既可以使用这个类的方法。

  • php的命名空间
  • 当不同文件里有多个相同的类名的时候,这时候为了便于区分,php提供了一个命名空间的概念。
  • 在index.php文件的同级目录下新建两个文件夹"first", "second".分别在里面新建两个相同名字的php文件,php文件的内容分别是:

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: HIAPAD
     5  * Date: 2019/3/23
     6  * Time: 9:39
     7  */
     8 
     9 namespace first;
    10 
    11 
    12 class Hello
    13 {
    14     public function sayhello(){
    15         echo "我是first里面的hello";
    16     }
    17 }
     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: HIAPAD
     5  * Date: 2019/3/23
     6  * Time: 9:40
     7  */
     8 
     9 namespace second;
    10 
    11 
    12 class Hello
    13 {
    14     public function sayhello(){
    15         echo "我是second里面的hello";
    16     }
    17 }

    可以看到,两个php文件里面的类名,类方法名字都是一样的,这个时候我们在引入的时候可能会出现冲突。php命名空间,也就是这里面的namespace,为我们解决了这个问题。接下来我们在index.php中来引入这两个文件

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: HIAPAD
     5  * Date: 2019/3/23
     6  * Time: 9:16
     7  */
     8 
     9 require 'first\Hello.php';
    10 require 'second\Hello.php';
    11 
    12 $i = new \first\Hello();
    13 $i->sayhello();
    14 $i = new \second\Hello();
    15 $i->sayhello();

    引入文件用的是require 后面接文件的相对路径的字符串形式。在类的实例化的时候,用namespace接该namespace下的类的名字来完成对应的类的实例化。      

  • 类的初始化
     1 <?php
     2 
     3 class Hello{
     4     public function __construct(){
     5         echo "hello";
     6     }
     7 }
     8 
     9 
    10 $i = new Hello();

     php类的初始化方法__construct方法,会在类的对象被实例化的时候执行。

  • 类的初始化传参
     1 <?php
     2 
     3 class Hello
     4 {
     5     public function __construct($name, $age)
     6     {
     7         $this->age = $age;
     8         $this->name = $name;
     9     }
    10 
    11     public function getInfo()
    12     {
    13         return "这个人的名字是$this->name,他今年$this->age"."岁";
    14     }
    15 }
    16 
    17 $i = new Hello("bob",18);
    18 echo $i->getInfo();

    在类的__construct方法里面传入的参数可以用$this->params变量接收,在接下来类的方法里面可以调用$this->params变量来操作。__construct相当于python里面的__init__()方法,this相当于python里面的self。

  • php的成员方法和类方法
     1 <?php
     2 
     3 class Hello
     4 {
     5     public function __construct($name, $age)
     6     {
     7         $this->age = $age;
     8         $this->name = $name;
     9     }
    10 
    11     public function getInfo()
    12     {
    13         return "这个人的名字是$this->name,他今年$this->age"."岁";
    14     }
    15 
    16     public static function getAge(){
    17         return "这是一个静态方法和类方法";
    18     }
    19 }
    20 echo Hello::getAge();

    在类中创建方法的时候使用关键字static来创建一个静态方法和类方法。静态方法不会调用这个类里面的其他类属性和类方法。类方法可以直接被类本身调用,不用通过类的初始化对象来访问。访问方法:类名::方法名().

php 的public、private、protected的区别

  • public 表示全局,类内部外部子类都可以访问;
  • private表示私有的,只有本类内部可以使用;
  • protected表示受保护的,只有本类或子类或父类中可以访问;
posted @ 2019-03-23 10:12  Ivy丶  阅读(182)  评论(0编辑  收藏  举报