2020年5月21日
<?php
class 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代替$this
var_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;//变量的内存地址赋值给$res2
var_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);
?>
<?php
class 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代替$this
var_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;//变量的内存地址赋值给$res2
var_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);
?>
<?php
class 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代替$this
var_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;//变量的内存地址赋值给$res2
var_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);
去做一些特殊参数的初始化