位置: 编程技术 - 正文

浅谈Laravel中的一个后期静态绑定(laravel enum)

编辑:rootadmin

推荐整理分享浅谈Laravel中的一个后期静态绑定(laravel enum),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:laravel yield,laravel有什么用,laravel特点,laravel enum,laravel vendor,laravel有什么用,laravel有什么用,laravel有什么用,内容如对您有帮助,希望把文章链接给更多的朋友!

关于 PHP 的 new static 延迟静态绑定,或者叫后期静态绑定,在 Laravel 中遇到一个使用上的问题。如下,在 Laravel 中调用 Model 新增数据的时候,首先给 Model 加了一个获取分表的方法:

这里 setTable 方法是在 Model 里定义的获取分表的方法:

从报错日志中发现 $this->table 并没有生效,但实际上在调用 create 方法之前打印表名的时候是期望的值,这里调用 create 方法为什么 $this->table 没有被重置呢?

这里 $this->message 是一个继承 Model 类的模型类,其中 create 方法:

位于 vendorlaravelframeworksrcIlluminateDatabaseEloquentModel.php Line .

因为 Laravel 框架的这个 Model 类是一个 abstract 类型,PHP 中 abstract 类可以用 new static 后期静态绑定的方式实例化,而 create 方法里 $model = new static($attributes) 实际上就是重新实例化了并返回,而调用者 Model 类没有定义 table 属性,所以这个时候 $this->table 是没有值的。

浅谈Laravel中的一个后期静态绑定(laravel enum)

解决办法是用 save 方法即可,如图所示。实际上 create 方法也调用了 save 方法。

实验

一个抽象类 A,有个 create 方法,通过延迟静态绑定实例化并返回。B 类继承 A,test 方法中修改父类的 name 属性。

结果显示 $obj1 和 $obj2 这两个实例都是 B 的实例,调用 test 方法属性 name 改变了,但是调用 create 方法后,name 属性并没有改变。 这也就是在本文中说的在 Lavarel 中遇到的场景。 (这里如果把注释打开,打印的 name 就是重写的值)

如果把抽象类 A 改成普通类,new static 改成 new self 的方式实例化,结果就不同了,打印的属性 name 都是各自类的属性。

参考链接

PHP:后期静态绑定

PHP中new self()和new static()的区别

标签: laravel enum

本文链接地址:https://www.jiuchutong.com/biancheng/289977.html 转载请保留说明!

上一篇:浅谈PHP中new self()和new static()的区别(php use function)

下一篇:php readfile()修改文件上传大小设置(php文件修改后,打开还是显示以前的页面)

  • 自己的医院
  • 保证人不承担责任(胜诉案例)
  • 固定资产的更新改造支出计入什么科目
  • 预付卡发票可以报销吗?
  • 个体营业执照从哪里查询
  • 物业管理水电费税率
  • 独资企业要交税吗
  • 工资核算方式
  • 已抵扣进项怎么转出
  • 期初应收帐款
  • 商业收入会计分录
  • 物业公司可以开什么项目的发票
  • 拆迁补偿款使用范围
  • 购买面粉的税率是多少
  • 支付董事会成员津贴计入什么科目
  • 电商刷单的收入怎么做凭证?
  • 软件产品加安装是混合销售吗?
  • 境外投资亏损是否可以抵减境内盈利
  • 固定资产清理出售合同
  • 王者荣耀体验皮肤什么时候结束
  • 前期差错更正怎么计算
  • php fopen ftp文件不存在
  • dl是什么文件
  • 路由器重启以后wifi不见了
  • 库存盘点差异会计分录
  • PHP:mcrypt_module_is_block_mode()的用法_Mcrypt函数
  • php中各种定义变量的值
  • 所有者权益期末减期初等于净利润还是利润总额
  • 小规模纳税人采购零配件税率
  • 毕业设计基于51单片机多功能电子钟的设计
  • php的输出语句
  • 结算应付职工薪酬影响当期损益吗
  • node_sass
  • 自建厂房折旧算制造费用吗
  • 净资产小于注册资本
  • 零售药店可申请纳入医保定点
  • 技术服务收入属于什么收入
  • 自查补税行为有哪些方面
  • 单位银行提取大额现金最多能取多少
  • 信用减值损失属于什么类
  • case语句怎么执行
  • 住房补贴需要交个税吗
  • 在建工程包括哪些大类科目
  • 以前年度多结转了成本,可以不调回了今年少结转吗
  • 租赁存在的原因有哪些
  • 宣传费税前扣除什么意思
  • 进口材料海关需要什么手续
  • 纳税评估补缴的增值税影响所得税吗
  • 费用报销票据规范要求
  • 固定资产转售账务处理
  • 企业所得税汇算清缴时间
  • 应付票据与应付账款增长的多的逃税问题
  • 个人独资企业的投资人以其个人财产对企业债务承担
  • 自产产品用于职工食堂,确认收入吗
  • 试运行收入冲减哪个项目
  • 市盈率为负数是说明什么呢
  • 固定资产公司
  • 一家企业至少要运转几个月以上
  • mysql exists与not exists实例详解
  • mysql多表查询方式
  • window10怎么设置蓝牙
  • 查看linux系统版本信息
  • ubuntu adb找不到设备
  • xp系统怎么卸载驱动程序
  • 如何用u盘安装win8操作系统
  • linux openfoam
  • cocos studio
  • shell脚本获取命令的输出结果
  • python把html页面生成图片
  • javascript模块化规范有哪些
  • javascript中数组
  • 详细的测试用例
  • nodejs bff
  • javascript基础编程
  • 利用的英文
  • python程序设计的方法
  • python如何切行
  • 税收和社保不在同一地缴纳怎么办
  • 税务跨区变更需要什么资料
  • 虚假纳税申报的法律责任
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设