面向对象
发布时间:2020-12-13 20:55:13 所属栏目:PHP教程 来源:网络整理
导读:【类和对象的基本使用】 类的声明 调用 属性、方法 // 声明类 class Cat { 定义属性 public $name = '咪咪' ; $sex = null 定义方法 public function jiao() { echo '喵喵~' ; } } 实例化 $c1 = new Cat(); var_dump ( $c1 ); 调用 属性、方法 echo $c1 - na
【类和对象的基本使用】 //声明类 class Cat { 定义属性 public $name = '咪咪'; $sex = null定义方法 public function jiao() { echo '喵喵~'; } } 实例化 $c1 = new Cat(); var_dump($c1); 调用 属性、方法 echo $c1->name; jiao(); $c1->sex = '母'; $c1->sex; 传递赋值和引用赋值 $a = 'abc'; $b = $a;传递赋值 $c = &引用赋值 $a);abc $b);$c);abc $a = 'qq'; qq qq 对象的传递赋值 MyClass { $str = 'abc'; } $a = new MyClass(); $a 存的是对象的标识符 传递赋值 把标识符 赋值给 $b $str = 'abc' $str = 'abc' $a->str = '456';对象的属性改变了 //$a $b 存的 仍是 对象标识符 str = '456' str = '456' $a = 123int 123 对象标识符str = '456' 对象的引用赋值 $b = &引用赋值 把$a的引用 赋值给 $b str = 'abc' str = 'abc' $a->str = '123'str = '123' str = '123' int 123 【封装】 $a = 'public'protected $b = 'protected'private $c = 'private'; test() { 类内部调用 $this->a;public $this->b;protected $this->c;private } } $obj = MyClass; 类外 以 对象的方式调用 $obj->a;public $obj->b;报错 $obj->c;报错 $obj->test(); 构造函数:对象被实例化时调用 __construct() { echo '调用了__construct <br>'; } } $obj1 = new MyClass;调用了__construct $obj2 = new MyClass();调用了__construct 析构函数:对象被销毁时调用 __destruct() { echo '对象被销毁了' MyClass(); null;对象被销毁了 unset($obj);exit('结束掉');结束掉对象被销毁了 静态属性与静态方法 static static $a = 'static'$b = '123123'static func1() { echo '静态方法调用'; echo MyClass::$aecho self::echo '<hr>'; MyClass::func2(); ; self::不可以用$this去调用 //echo $this->$a;//Fatal error //$this->func2(); } func2() { echo 'this is static func2'; } func3() { echo 'this is func3'echo '静态属性'echo MyClass::echo self::func2(); echo $this->a;//去调用静态属性 失败 $this->func2(); } } $b;非静态调用失败 MyClass::func1(); MyClass(); 对象使用-> 去调用静态属性 失败 $obj->b; func1(); $obj->func3(); 常量const const NUM = 123; } NUM; MyClass::$a = 'def'; MyClass::NUM = 456; 报错,常量一经定义不能修改 属性的重载:不可访问的属性 Person { $name='小芳'$age=18;protected不可在外部访问 //触发了不可访问的属性 function __get($n) { if($n == 'age'){ return age; }else{ return '瞎问什么啊'; } } function __set($n,$vecho '触发了设置不可访问的属性'.$n.'值为'.; $this->$n = function __isset(echo '判断一个不可访问的属性是否存在'.function __unset(echo '销毁一个不可访问的属性'.; } } $xiao = Person(); $xiao->age;18 $xiao->xxx;瞎问什么啊 $xiao->age = 11;设置不可访问的属性age值为11 11 isset($xiao->age);判断一个不可访问的属性是否存在age 销毁一个不可访问的属性age 判断一个不可访问的属性是否存在age 方法重载:不可访问的方法 MyClass { protected function func(echo '这是一个不可访问的方法'echo '参数是'.function __call($name,1)">$argecho '触发了不可访问的方法'$name);方法名称 func $arg);参数 // array(2) { // [0] => // string(3) "aaa" // [1] => // int(123) // } } echo '受保护的静态方法'function __callStatic(echo '调用了不可访问的静态方法'func2 ); array(4) { // [0] => // int(1) // [1] => // int(2) // [2] => // int(3) // [3] => // int(4) // } } } MyClass(); $obj->func('aaa',123触发了不可访问的方法 MyClass::func2(1,2,3,4调用了不可访问的静态方法 【继承】 FatherClass { echo 'public func'echo 'protected func'private echo 'private func'; } } class SonClass extends test() { $this->func1();public方法可以被继承 $this->func2();protected方法可以被继承 //$this->func3();//Fatal error:private方法不可以被继承 SonClass(); public //echo $obj->b; //fatal error //echo $obj->c; //Notice //$obj->func1(); //$obj->func2(); //fatal error //$obj->func3(); //fatal error test(); public func protected func 类的重写 Father { shuo() { echo 'a a o o'class Son echo 'hello'shuo(); parent::shuo(); } } Son(); $obj->shuo();hello $obj->test();helloa a o o final 修饰类 则该类不能被继承 final function test() final 声明之后不能被重写 { Father { echo '你好'报错 【多态】 abstract MyAbsClass { $name = '张三'$age; } func(); } class ChildClass func() { } } MyAbsClass { } 接口interface interface MyInterface { func(); test(); } class MyClass implements func(){ } test(){ class MyAbsClass test(); } 【条件约束和自动加载】 Ainter { interface Binter test(); } Binter { test() { } func() { } } 判断是否属于某个类的实例 A { class B class C B { func() { echo 'ok'class D echo '好的'/* B实现了 A C、D继承自B C、D是兄弟 */ C(); D(); $arr = [1,3]; 是否属于D的实例 function test(D ) { ; } 是否属于A的实例 function test2(A ; } test($obj2);ok //test($obj1);//不属于D的实例 test2($obj1);ok test2(ok 自动加载__autoload function __autoload(include 'myclassfolder/'.$a.'.class.php'; } class A B { } 注册自动装载函数 function myloader( 有三个参数 参数1:需要注册的自动装载函数 参数2: 如果没有找到参数1的函数 是否抛出异常错误 参数3: 是否把参数1的函数添加到队列之首 */ spl_autoload_register('myloader',true,1)">true B { } 注册自动装载类 MyLoader { function l(; } } ['MyLoader','l'] //spl_autoload_register 第一个参数以数组方式传入 spl_autoload_register(['MyLoader','l'],1)"> B { } 初始化时自动装载 init(){ $this,1)">); } } MyLoader(); init(); B { } 【命名空间】 namespace A; function time(){ echo 'my time function <br>'; } namespace B; echo 'my space B time function <br>'time(); namespace B time() A namespace A time() B namespace B time() echo time(); 全局空间 命名空间(类案例) namespace AB; echo '空间AB 中的类 实例化了 <br>'; } } namespace A; echo '空间A 中的类 实例化了 <br>' 非限定名称 new ABMyClass(); 完全限定名称 new AMyClass();new BMyClass();限定名称 打印当前命名空间 echo __NAMESPACE__;
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |