面向对象一部分总结

1.静态变量(加 static)属于类,程序运行时,就分配空间,常用作常量,使用类就可以调用。

2. 实例变量 (不加 static)属于对象,在实例化(new) 时,分配空间。

3.局部变量(在函数内的变量)属于某个代码块(函数),在调用调用这个函数时,分配空间。

4

//后期静态绑定
class A {
    public static function who(){
        echo "A类的who方法";
    }
    public static function test(){
       // self::who(); //A类的who方法(self代表类本身)
        static::who(); //b类的who方法(static根据上下文查找)
    }
}

class B extends A{
    public static function who(){
        echo "b类的who方法";
    }
}
B::test();

5.魔术方法

//魔术方法
class Test{
    private $abc = '';
    public function __set($var,$val){//当对象设置一个不存在属性,或者属性权限不够时调用此方法
        echo $var.'set';
    }
    public function __get($var){//当对象使用一个不存在属性,或者属性权限不够时调用此方法
        echo $var.'get';
    }
    public function __isset($name)//当isset()或者empty()一个不存在或者权限不够的属性时调用此方法
    {
        echo $name.'isset';
    }
    public function __unset($name)//当销毁一个不存在或者权限不够的属性时调用此方法
    {
        echo $name.'unset';
    }
    public function __call($name, $arguments)//当调用一个不存在(权限不够,第一个参数是方法名,第二个参数是方法参数)的方法时调用
    {
        echo $name.'<br>';
        print_r($arguments);
    }
    public static function __callStatic($name,$arguments){//魔术方法也是静态的 当调用一个不存在(权限不够,第一个参数是方法名,第二个参数是方法参数)的静态方法时调用
        echo $name.'<br>';
        print_r($arguments);
    }
    public function __invoke($arg)//把对象当函数使用时调用这个方法
    {
        print_r($arg);
    }
    public function __toString()//echo对象时调用此方法,方法内必须return
    {
        return 'toString';
    }
}
$test = new Test();
//$test->abc = 'cehsi';
//empty($test->abc);
//unset($test->abc);
//$test->go(1,'ceshi');
//$test::gogo(2,'ceshi');
//$test('对象当函数使用');
echo $test;

6.对象拷贝

   6.1 浅拷贝,通过地址指向同一个值,一个变量改变值时另一个变量值也改变。

   6.2 深拷贝,复制出一个新的值,相互之间互不影响。

//变量之间的拷贝(浅拷贝,深拷贝)
class A{
    public $age = 0;
}
$a = new A;
//$b = $a; //浅拷贝(省内存,php默认是浅拷贝)
$b = clone $a;//使用clone则是深拷贝
$b->age = 1;
print_r($a->age);

7.trait关键字(解决php是单继承,无法继承多个类的问题,是一种代码复用机制)

//trait关键字
trait A{
    public $name = 'hong';
    public function testa(){
        echo 'hello';
    }
    public function testb(){
        echo 'world';
    }
}

trait C{
    public function testc(){
        echo 'ccc';
    }
}
class B{
    use A;
    use C;
}

$b = new B;
$b -> testa();
$b -> testc();
print_r($b->name);
8.接口类
//接口类(可以理解接口是类的模板,接口可以继承不能实例化)
interface Person{
    public function eat();
    public function sleep();
}
class Man implements Person{
    public function eat(){
        echo '大口吃';
    }
    public function sleep(){
        echo '睡觉打呼噜';
    }
}
class Woman implements Person{
    public function eat(){
        echo '小口吃';
    }
    public function sleep(){
        echo '睡觉很安静';
    }
}

$user = new woman;
$user ->eat();
$user ->sleep();

9.抽象类

//抽象类(介于接口和类之间的)
abstract class Person{
    public function eat(){
        echo '必须吃';
    }
    //抽象方法
 abstract public function sleep();
}
class Man extends Person{
//    public function eat(){
//        echo '大口吃';
//    }
    //继承抽象类的子类需要实现抽象类中定义的抽象方法
    public function sleep(){
        echo '睡觉打呼噜';
    }
}
$user = new Man;
$user ->eat();
$user ->sleep();

 

10.设计模式

   10.1单例模式

   

//单例模式(只能被实例化一次,节省内存)
class Test{
    private static $_instance = null; //唯一实例存储在静态变量中
    private function __construct()//私有的构造方法禁止被实例化
    {
    }
    private function __clone()//私有的克隆方法禁止被克隆
    {
    }

    public static function getInstance()
    {
//        if (!self::$_instance instanceof self) {//判断静态变量是否是是否存储类
//            self::$_instance = new self();
//        }
        if (self::$_instance == null) {//判断静态变量是否是是否存储类
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    public function test(){
        echo '这是一个单例模式';
    }
}
//
//
$t = Test::getInstance();
$t->test();

 10.2工厂模式

//工厂模式
class Memach{
    public function set($k,$v){
    }
    public function get($k){
        echo 'Memach';
    }
    public function delete($k){

    }
}
class Redis{
    public function set($k,$v){
    }
    public function get($k){
        echo 'Redis';
    }
    public function delete($k){

    }
}
class Cache{
    public static function factory(){//这个方法这是返回一个缓存实例
        return new Redis;//如果想更换缓存,只修改此处代码就可以
    }
}
$cache = Cache::factory();
$cache ->get(3);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值