2020年5月21日
<?phpclass A{protected $a = '黑子';public function __isset($name){return isset($this->$name);}}$res= new A();//访问不存在的属性var_dump(isset($res->b));var_dump(empty($res->b));//访问不可访问的属性var_dump(isset($res->a));var_dump(empty($res->a));class A{protected $a = '黑子';public function __unset($name){unset($this->$name);}}$res=new A();var_dump($res);//删除一个不存在的属性unset($res->b);//删除一个不可访问的属性unset($res->a);class A{public static $name = 'A=>static';public static function demo(){//使用静态变量//用self代替$thisvar_dump(self::$name);//调用静态方法self::demo1;}public static function demo1(){var_dump('demo1');}//如非要访问动态内容(特定时使用)public static function gto(){$res =new self();var_dump($res);//调用动态方法$res->demo2();}public function demo2(){var_dump('demo2');var_dump($this);}}//访问静态变量var_dump(A::$name);//使用静态方法A::demo();//静态方法调用动态A::gto();final class A{final public function demo(){var_dump('A::demo()');}}//测试//$obj = new A();//$obj->demo();class B extend A{//public function demo(){//var_dump("不可覆盖")}}$obj =new B;$obj->demo();class A{}//判断对象是否属于某个类//实例化得到一个对象$res = new A();var_dump($res instanceof A);//判断对象和对应的类是否是祖先class B{}class C extends B{}//实例化得到c类对象$resC = new C();var_dump($resC instanceof B);//继承只能单继承,多层级的方式来继承多个类class D extends C{}$resD = new D();var_dump($resD instanceof B);//c类对象是否是d类的实例化//不是var_dump($resC instanceof D);class A{public $name = 'hz';public function __clone(){$this->name ='克隆01';}}$res1 = new A();var_dump($res1->name);$res2 = $res1;//变量的内存地址赋值给$res2var_dump($res2->name);//改变res2的name属性$res2->name='fire';var_dump($res1->name,$res2->name);echo"<hr>";$res3 =clone $res1;var_dump($res3->value);echo"<hr>"$res3 ->value="new fire";var_dump($res1->value,$res3->value);?><?phpclass A{protected $a = '黑子';public function __isset($name){return isset($this->$name);}}$res= new A();//访问不存在的属性var_dump(isset($res->b));var_dump(empty($res->b));//访问不可访问的属性var_dump(isset($res->a));var_dump(empty($res->a));class A{protected $a = '黑子';public function __unset($name){unset($this->$name);}}$res=new A();var_dump($res);//删除一个不存在的属性unset($res->b);//删除一个不可访问的属性unset($res->a);class A{public static $name = 'A=>static';public static function demo(){//使用静态变量//用self代替$thisvar_dump(self::$name);//调用静态方法self::demo1;}public static function demo1(){var_dump('demo1');}//如非要访问动态内容(特定时使用)public static function gto(){$res =new self();var_dump($res);//调用动态方法$res->demo2();}public function demo2(){var_dump('demo2');var_dump($this);}}//访问静态变量var_dump(A::$name);//使用静态方法A::demo();//静态方法调用动态A::gto();final class A{final public function demo(){var_dump('A::demo()');}}//测试//$obj = new A();//$obj->demo();class B extend A{//public function demo(){//var_dump("不可覆盖")}}$obj =new B;$obj->demo();class A{}//判断对象是否属于某个类//实例化得到一个对象$res = new A();var_dump($res instanceof A);//判断对象和对应的类是否是祖先class B{}class C extends B{}//实例化得到c类对象$resC = new C();var_dump($resC instanceof B);//继承只能单继承,多层级的方式来继承多个类class D extends C{}$resD = new D();var_dump($resD instanceof B);//c类对象是否是d类的实例化//不是var_dump($resC instanceof D);class A{public $name = 'hz';public function __clone(){$this->name ='克隆01';}}$res1 = new A();var_dump($res1->name);$res2 = $res1;//变量的内存地址赋值给$res2var_dump($res2->name);//改变res2的name属性$res2->name='fire';var_dump($res1->name,$res2->name);echo"<hr>";$res3 =clone $res1;var_dump($res3->value);echo"<hr>"$res3 ->value="new fire";var_dump($res1->value,$res3->value);?><?phpclass A{protected $a = '黑子';public function __isset($name){return isset($this->$name);}}$res= new A();//访问不存在的属性var_dump(isset($res->b));var_dump(empty($res->b));//访问不可访问的属性var_dump(isset($res->a));var_dump(empty($res->a));class A{protected $a = '黑子';public function __unset($name){unset($this->$name);}}$res=new A();var_dump($res);//删除一个不存在的属性unset($res->b);//删除一个不可访问的属性unset($res->a);class A{public static $name = 'A=>static';public static function demo(){//使用静态变量//用self代替$thisvar_dump(self::$name);//调用静态方法self::demo1;}public static function demo1(){var_dump('demo1');}//如非要访问动态内容(特定时使用)public static function gto(){$res =new self();var_dump($res);//调用动态方法$res->demo2();}public function demo2(){var_dump('demo2');var_dump($this);}}//访问静态变量var_dump(A::$name);//使用静态方法A::demo();//静态方法调用动态A::gto();final class A{final public function demo(){var_dump('A::demo()');}}//测试//$obj = new A();//$obj->demo();class B extend A{//public function demo(){//var_dump("不可覆盖")}}$obj =new B;$obj->demo();class A{}//判断对象是否属于某个类//实例化得到一个对象$res = new A();var_dump($res instanceof A);//判断对象和对应的类是否是祖先class B{}class C extends B{}//实例化得到c类对象$resC = new C();var_dump($resC instanceof B);//继承只能单继承,多层级的方式来继承多个类class D extends C{}$resD = new D();var_dump($resD instanceof B);//c类对象是否是d类的实例化//不是var_dump($resC instanceof D);class A{public $name = 'hz';public function __clone(){$this->name ='克隆01';}}$res1 = new A();var_dump($res1->name);$res2 = $res1;//变量的内存地址赋值给$res2var_dump($res2->name);//改变res2的name属性$res2->name='fire';var_dump($res1->name,$res2->name);echo"<hr>";$res3 =clone $res1;var_dump($res3->value);echo"<hr>"$res3 ->value="new fire";var_dump($res1->value,$res3->value);?>
笔记
魔术方法 isset
isset(string $name) :bool
在使用isset或者empty()去访问一个不存在或不可访问的属性时自动调用
从哪来(调用 访问)
到哪去(返回值 结果)
魔术方法 unset
unset(string $name) :void
当调用unset去删除不可访问或不存在访问的属性时自动调用
静态修饰符:static
语法:
属性:[访问控制修饰符] [静态修饰符] 变量[ = 值];
方法:[访问控制修饰符] [静态修饰符] function 方法名(){}
静态内容(有静态修饰符的方法和属性)无需实例化,直接使用 ::调用;
静态方法中没有$this全部使用self代替
静态方法中只能去访问静态方法和静态变量
如非要访问动态内容(特定时使用);静态方法中去new这个类;就会得到对象
final 关键词(修饰符)
类:final class 类名{}
方法:final [访问控制修饰符] [静态修饰符] function 方法名(){}
instanceof 运算符 关键字
用来判断一个对象是否属于某个类(或祖先)
对象克隆
由于对象复制不能够直接复制(引用类型)所以需要使用clone关键字;
clone(): clone() :void
当克隆时自动调用;类似构造函数(clone);
去做一些特殊参数的初始化
