面向对象
来源:互联网 发布:大黄蜂 擎天柱 知乎 编辑:程序博客网 时间:2024/05/16 06:05
一直用的都是框架,今天花了几个小时,简单的温习了一下面向对面,在这里进行简单的回顾一遍:
面向对象的三个重要特点:重用性,灵活性,扩展性
第一节:命名空间
如果两个命名空间里面是同一个方法的话
只需要:
use venter\session\Imooc;
use venter\Imooc as Imooc2;
第二节:全局空间的类:
带反斜杠即可
—->var_dump(new \Test1());
第三节:类自动加载
function __autoload($className){ require $className.".php";}
===>$imooc = new Imooc();
或者:
function spl_autoload_register(function($className){ require $className.".php"})
或者:
function test($className){ require $className.".php";}spl_autoload_register('test');$imooc = new Imooc();var_dump($imooc);
或者:
class Momo{ function autoload($className) { require $className.".php"; }}spl_autoload_register([new Momo,'autoload']);$imooc = new Imooc();var_dump($imooc);
第四节:后期静态绑定:
class A{ public static function who() { echo "A"; } public static function test() { self:who(); }}class B extends A{ public static function who() { echo "B"; }}B:test(); ---->输出B
第五节:魔术方法:
__set()
__get()
—->案例:
class Test{ private $abc = ''; private $cba = ''; public function __set($var,$val) { $this->$var = $val; } public function __get($var) { return $this->$var; }}$test = new Test();$test->abc = 'abc';var_dump($test->abc); ---->输出abc
__isset —>私有属性是否存在:
class Test{ private $abc = 'abc'; //私有属性 public function __isset($var) { return isset($this->var)?true:false; }}$test = new Test();var_dump(isset($test->abc));
__unset —>用户删除私有属性的时候,就会去回调:
class Test{ private $abc = 'abc'; public function __unset($var) { echo ("__unset:".$var); unset($this->$var); }}$test = new Test();unset($test->abc);
__call —->当我们调用的方法不存在的时候产生错误,可以使用call
class Test{ public function __call($func,$arguments) { echo ($func); print_r($arguments); }}$test = new Test();$test->go(1,'ok'); ====>go Array([0]=>1,[1]=>ok);
__callStatic —->当静态方法不存在,就调用callStatic
class Test{ public static function __callStatic($func,$arguments) { echo ($func); print_r($arguments); }}Test:go(1,'ok');
__invoke —>当对象以函数的方式被调用时,就用到这个
class Test { public function __invoke($arg) { var_dump($arg) } } $test = new Test(); $test('go...'); ===>go...
__toString —->当打印对象变量的时候,toStrong就自动调用了:
class Test{ public function __invoke($arg) { var_dump($arg); } public function __toString() { return "Hello"; }}$test = new Test();echo ($test);
第六节:对象拷贝和类型约束:
class A{ public $age = 0; public $username = ""; //对象属性: public $obj = null;}$a = new A();$b = $a; //浅拷贝 --->剩内存$b->age = 1;var_dump($a->age); ===>1 深度:对象复制:浅拷贝+深拷贝 例如:我要出去玩,需要车,叫老爸给我车钥匙,老爸叫我去抽屉拿。东西就一个:车钥匙 我去拿车钥匙,这一步骤叫地址传递所以---->浅拷贝:地址传递深拷贝:复制一亮车钥匙给我 (值传递)如果:$a = new A();$b = clone $a; //深拷贝$b->age = 1;var_dump($a->age); ----> 0
加深印象—>
class A{ public $age = 0; public $username = ""; //对象属性 public $obj = null;}class B{ public $sex = 0;}$a = new A();$a->obj = new B();$b = $a; //浅拷贝$b->obj->sex = 1;var_dump($a->obj->sex); --->1如果:$a = new A();$a->obj = new B();$b = clone $a; //这里仍然是浅拷贝$b->obj->sex = 1;var_dump($a->obj->sex); ===>1如果:class A{ public $age = 0; public $username = ""; //对象属性 public $obj = null; public function __clone() { $this->obj = clone $this->obj; }}class B{ public $sex = 0;}$a = new A();$a->obk = new B();$b = clone $a; //这里是深拷贝$b->obj->sex = 1;var_dump($a->obj->sex); --->0
类型约束
class A{ public $name = ""; public function go() { echo "go...."; }}function test(A $a){ $a->go();}test(new A());
第七节:Trait关键字:解决单继承的问题
PHP5.4开始:
trait Bt{ public function atest() { echo "A"; } public function btest() { echo "B"; } public function ab() { $this->atest(); $this->btest(); }}class Test{ use Bt;}$test = new Test();$test->ab(); --->AB
再来一波操作:
trait A{ public $abc = "abc"; public function a() { echo "Hello"; }}trait B{ public function b() { echo "world"; }}trait C{ use A,B;}class Test{ use C; public function a() { echo "hei"; echo ($this->abc); }}$test = new Test();$test->a();$test->b();$test->c(); ===⇒ hello world hei abc
第八节:接口类和抽象类以及设计模式:
interface Person{ public function eat(); public function sleep();}class Man implements Person{ public function eat() { echo "大餐"; } public function sleep() { echo "大觉"; }}class L{ public static function factory(Person $user) { return $user; }}$user = L::factory(new Man());//很多业务逻辑代码::::$user->eat();
单例模式跟工厂模式:
单例模式:确保一个类只要一个实例
具体的:http://blog.csdn.net/jungsagacity/article/details/7618587 —>挺不错的
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- GitLab的使用(一)---安装
- 由一道关于位运算的程序设计题引发的思考
- Spring 架构篇——Spring Boot 整合 MongoDB
- c#跨窗体传值_构造函数.子传父
- 测试
- 面向对象
- Postman使用官方文档翻译--4postman主界面介绍
- git批量删除文件和批量提交
- 导出Excel封装
- 长连接和短连接的区别
- LightOJ-1370
- Spring-------使用Spring创建对象
- 写了一个线上bug
- CodeBlocks创建静态链接库和使用