代码改变世界

php基础:面向对象

2017-08-31 16:31  ZengGW  阅读(279)  评论(0编辑  收藏  举报

一、public、private、protected访问修饰符

  public:任何都可以访问(本类、子类、外部都可以访问)

  protected:本类、子类都可以访问(本类、子类均可访问)

  private:本类可以访问,其他均不可访问

二、构造函数、析构函数

  1. __construce()

  2. __destruct():注销一个对象

三、接口interface

  接口:php类是单继承的,不支持多继承,当一个类需要多个类的功能时,php类就无能为力,所以引入接口;什么是接口:如果一个抽象类里边的所有方法都是抽象方法,并且所有方法声明的关键字都是public,并且没有声明变量,这种类就是抽象类

  关键字:interface来定义接口,使用implemens来实现接口的方法,必须全部实现

三、instanceof检查"是一"关系,如下代码:

<?php
interface ExampleInterface
{
    public function interfaceMethod();

    public function play();
}

 class ExampleClass implements ExampleInterface
 {
     public function interfaceMethod()
     {
         return 'Hello World!';
     }

     public function play()
     {
         return 'This is a num';
     }
 }

    $exampleInstance = new ExampleClass();

 if($exampleInstance instanceof ExampleInterface){
     echo 'Yes, it is';
 }else{
     echo 'No, it is not';
 }

  以上代码输出的结果是:Yes, it is,为什么呢?ExampleClass它使用了关键字implements实现了ExampleInterface,所有他们是"是一"关系

四、final关键字

  1.允许你用来标记方法,但是不能被子类重载(就是说再子类中不能重新书写标记final的方法)

class TestClass
{
    final function play()
    {
        return 'This is a num';
    }
}

class TestTwo extends TestClass
{
    public function play()
    {
        return 'This is a 222222';
    }
}

$test = new TestTwo();
echo $test->play();

  上边代码提示:Fatal error: Cannot override final method TestClass::play()

  2.final用来标记一个类时,该类就不能被继承

五、clone:克隆对象,在使用对象的时候开业克隆一个

六、const 关键字声明类的常量(调用时不需要实例化对象,直接调用):

<?php
class TestClass
{
    const NAME = 'zgw2014';
    const AGE = 'zgw2014';
}

echo TestClass::AGE;

七:静态属性关键字:static

  1.静态方法:

class TestClass
{
   static function helloworld()
   {
       return '哈哈哈哈哈哈';
   }
}

echo TestClass::helloworld();

  2. 静态成员,类的定义包含现静态成员属性,开业通过类自身访问,不需要实例化对象,;通常用的最多的就是单利模式(单件模式) 

class TestClass
{
    static private $instance = NULL;

    static public function getInstance()
    {
        if(self::$instance == NULL)
        {
            self::$instance = new DB();
        }

        return self::$instance;
    }
}

class DB
{
    public function play()
    {
        return '单利';
    }
}

$obj = TestClass::getInstance();
echo $obj->play();

八:抽象类abstract

  1.抽象类:把类声明成为一个抽象类,可以防止被实例化,但是你可以继承一个抽象类

abstract class TestClass
{
    public function getInstance()
    {
        return 'get getInstance';
    }
}

$obj = new TestClass();
echo $obj->getInstance();

  上边的代码运行会提示:Fatal error: Uncaught Error: Cannot instantiate abstract class TestClass

  2.抽象方法:定义一个抽象方法以便在子类中再取重新定义实现,包含有抽象方法的类本身必须是抽象类

九 、自动加载:__autoload

function __autoload($className)
{
    $classPath = './'.$className.'.php';
    if(file_exists($classPath))
    {
        require_once $classPath;
    }else{
        echo 'class file'.$classPath.'not found!';;
    }
}

$obj1 = new ClassA();
$obj2 = new ClassB();

  上边代码的前提是在你设置的class路径里边必须有你实例化的类名的同名文件才行,也就是实例对象的文件名和类名一致才行

十、异常捕获机制 try{}catch(){}

function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    throw new Exception($errno.'###'.$errstr.'###'.$errfile.'###'.$errline, 1);
}
set_error_handler('myErrorHandler');
try{
    $db = new mysqli('localhost','root','1111');
    var_dump($db);
}catch(Exception $e){
    echo $e->getMessage();
}

  以上代码 设置用户自定义的错误处理函数

小技巧:

  1.开启php的短标签:short_open_tag = On (开启后可以使用<? 代替<?php)

  2.php的三种注释:

    c语言注释:/***/

    c++注释://

    shell注释:#

  3.