php基础:面向对象

时间:2024-07-03 22:33:56

一、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.