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.