Php工厂设计模式重载了常见魔法常量的序列化 - 汇站网

Php工厂设计模式重载了常见魔法常量的序列化

2023-11-18 0 544

Php工厂设计模式重载了常见魔法常量的序列化

工厂设计模式是什么?

根据传递的不同类名参数返回不同类的对象;
工厂模式是生产各种各样的物体;
工厂模式改变了使用 new 关键字在类外创建对象的方式,改为在工厂类内创建对象。
我们不能控制外面班级的行为,但是我们可以控制里面班级的行为。

2.工厂设计模式的要求

一般来说,定义一个工厂类;
工厂类中的方法应该是公共静态方法;
该方法的作用是根据传递的不同参数创建不同的类实例;

3.示例:创建具有不同形状类别的对象。

重载的

1.什么是超载?

在其他编程语言中,面向对象重载是指方法同名但参数列表不同,但 PHP 不支持同名的函数或方法。
PHP 提供的“重载”是指动态“创建”类的属性和方法,我们用魔术的方法实现。
在当前环境中调用未定义或不可见的类属性或方法时,会调用重载方法。
所有重载的方法都必须声明为公共的。
属性重载只能在对象中完成。在静态模式下,这些神奇的方法不会被调用。所以这些方法都不能声明为静态的。
这些神奇方法的参数不能通过引用传递。

2、属性重载

(1)__get()魔术方法,描述:读取不可访问属性的值时,__get() 会被调用。

语法:

//汇站网 https://www.huizhanii.com  
public mixed __get ( string $name )
//$name = 不可访问的属性名 
//汇站网 https://www.huizhanii.com 
class Student
{
    //私有的成员属性
    private $name = "张三";
    private $age  = 24;
    //当访问不可访问属性时,__get()魔术方法会自动调用
    public function __get($n)
    {
        return $this->$n;
    }
}
//创建学生类对象
$obj = new Student();
//访问私有的属性
echo "{$obj->name}的年龄是{$obj->age}岁!";  

(2)__set()魔术方法,描述:在给不可访问属性赋值时,__set() 会被调用。

public void __set ( string $name , mixed $value )  
class Student
{
    //私有的成员属性
    private $name = "张三";
    private $age  = 24;
    //当给不可访问的属性赋值时,__set()魔术方法自动调用
    public function __set($n,$v)
    {
        $this->$n = $v;
    }
}
//创建学生类对象
$obj = new Student();
//修改私有属性
$obj->name = "刘明明";
$obj->age  = 29;
var_dump($obj);   

(3)__isset()魔术方法,描述:当对不可访问属性调用 isset() 或 empty() 时,__isset()会被调用。

public bool __isset ( string $name )  
class Student
{
    //私有的成员属性
    private $name = "张三";
    private $age  = 24;
    //当对不可访问的属性应用 isset()或 empty()时,__isset()会自动调用
    public function __isset($n)
    {
        return isset($this->$n);
    }
}
//创建学生类对象
$obj = new Student();
//判断私有属性是否存在
if(isset($obj->name))
{
    echo "存在";
}else
{
    echo "不存在或不可访问";
}  

(4)__unset()魔术方法,描述:当对不可访问属性调用 unset() 时,__unset()会被调用。

public void __unset ( string $name )  
class Student
{
    //私有的成员属性
    private $name = "张三";
    private $age  = 24;
    //当对私有属性应用 unset()时,魔术方法 __unset()自动调用
    public function __unset($n)
    {
        unset($this->$n);
    }
}
//创建学生类对象
$obj = new Student();
//删除对象属性
unset($obj->name);
var_dump($obj);   

3、方法重载

(1)__call()魔术方法,描述:在对象中调用一个不可访问方法时,__call() 会被调用。

语法

public mixed __call ( string $name , array $arguments ) 
class Student
{
    //私有的成员属性
    private $name = "张三";
    private $age  = 24;
    //当访问不存在或不可访问的方法时,魔术方法 __call()自动调用
    //参数:$func 是传递过来的方法名称,$args 是传递过来的参数数组
    public function __call($func,$args)
    {
        echo "方法{$func}(".implode(',',$args).")不存在或不可访问!";
    }
}
//创建学生类对象
$obj = new Student();
//调用一个不存在的方法
$obj->showInfo("张三",24);  
/class Student
{
    //私有的成员属性
    private $name = "张三";
    private $age  = 24;
    //当访问不存在或不可访问的方法时,魔术方法 __call()自动调用
    //参数:$func 是传递过来的方法名称,$args 是传递过来的参数数组
    public function __call($func,$args)
    {
        echo "方法{$func}(".implode(',',$args).")不存在或不可访问!";
    }
}
//创建学生类对象
$obj = new Student();
//调用一个不存在的方法
$obj->showInfo("张三",24);   

(2)__callStatic()魔术方法,描述:用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。

public static mixed __callStatic ( string $name , array $arguments )  
class Student
{
    //私有的成员属性
    private $name = "张三";
    private $age  = 24;
    //用静态化方式访问不存在或不可访问的方法时,魔术方法 __callStatic()自动调用
    //参数:$func 是传递过来的方法名称,$args 是传递过来的参数数组
    public static function __callStatic($func,$args)
    {
        echo "方法{$func}(".implode(',',$args).")不存在或不可访问!";
    }
}
//用静态化方法调用 showInfo()方法
Student::showInfo('张三四',24,'男');  

变量序列化

1、什么是变量序列化

序列化是将变量转换成可以保存或传输的字符串的过程;
反序列化就是在适当的时候把这个字符串转换成原来的变量;
这两个过程的结合可以方便地存储和传输数据,使程序更具可维护性;
序列化有利于存储或传递 PHP 值,而不会丢失其类型和结构。

2、序列化函数 serialize()

描述:产生一个可存储的值的表示;

string serialize ( mixed $value )   
//数组变量序列化
$arr = array(
        'db_host' => 'localhost',
        'db_user' => 'root',
        'db_pass' => 'root',
        'db_name' => 'itcast',
    );
//序列化:将变量转成可保存的字符串
$str = serialize($arr);
//将序列化字符串,保存到记事本
file_put_contents('./1.txt',$str);  

3、反序列化函数 unserialize()

说明:对单一的已序列化的变量进行操作,将其转换回 PHP 的值。
参数:$str 为序列化后的字符串;
返回:返回的是转换之后的值,可为 integer、float、string、array 或 object。 如果传递的字符串不可序列化,则返回 FALSE,并产生一个 E_NOTICE。

//反序列化:序列化字符串,还原成原始变量
//读取记事本的数据
$str = file_get_contents('./1.txt');
//将序列化字符串,还原成变量
$arr = unserialize($str);
//打印变量
print_r($arr);  

4、对象序列化

对象的序列化过程与其他变量数据的序列化过程相同。对象序列化的内容只能包含成员属性。在序列化对象时,会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。这个功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。

5、对象反序列化

对象的反序列化过程与其他变量数据的反序列化过程相同。当对象反序列化时,会检查类中是否存在一个 __wakeup()方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。__wakeup() 经常用在反序列化操作中,进行一些初始化操作,例如重新建立数据库连接或执行其他初始化操作。对象的反序列化过程与其他变量数据的反序列化过程相同。

常用的魔术常量
LINE:当前行号
FILE:当前文件
DIR:当前目录
FUNCTION:当前函数
CLASS:当前类
METHOD:当前方法
NAMESPACE:当前命名空间

转载请注明:汇站网 » Php 工厂设计模式重载了常见魔法常量的序列化

收藏 (0)

微信扫一扫

支付宝扫一扫

点赞 (0)

感谢您的来访,获取更多精彩资源请收藏本站。

本站声明

本资源仅用于个人学习和研究使用,禁止用于任何商业环境!

 1.  本网站名称:汇站网
 2.  本站永久网址:https://www.huizhanii.com/
 3.  本站所有资源来源于网友投稿和高价购买,所有资源仅对编程人员及源代码爱好者开放下载做参考和研究及学习,本站不提供任何技术服务!
 4.  未经原版权作者许可,禁止用于任何商业环境,任何人不得擅作它用,下载者不得用于违反国家法律,否则发生的一切法律后果自行承担!
 5.  为尊重作者版权,请在下载24小时内删除!请购买原版授权作品,支持你喜欢的作者,谢谢!
 6.  若资源侵犯了您的合法权益, 请持您的版权证书和相关原作品信息来信通知我们请来信     通知我们我们会及时删除,给您带来的不便,我们深表歉意!
 7.  如下载链接失效、广告或者压缩包问题请联系站长处理!
 8.  如果你也有好源码或者教程,可以发布到网站,分享有金币奖励和额外收入!
 9.  本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
 10.  因源码具有可复制性,一经赞助 ,不得以任何形式退款。
 11.  更多详情请点击查看

汇站网 php Php工厂设计模式重载了常见魔法常量的序列化 https://www.huizhanii.com/33813.html

汇站

站长资源下载中心-找源码上汇站

常见问题
  • 如果付款后没有弹出下载页面,多刷新几下,有问题联系客服!
查看详情
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情

相关文章

发表评论
暂无评论
  随机评论 表情开关按钮图片
表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情
登录后评论
联系官方客服

为您解决烦忧 - 24小时在线 专业服务

(汇站网)一个专注站长资源的平台网站,提供最新的网站模板和整站源码,内容包含各类精品网页模板,企业网站模板,网站模板,DIV+CSS模板,织梦模板,帝国cms模板,discuz模板,wordpress模板,个人博客论坛模板,上千种免费网页模板下载尽在汇站网.找源码上汇站.huizhanii.com