位置: 编程技术 - 正文

浅谈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文件修改后,打开还是显示以前的页面)

  • 一个季度超过30万怎么做账
  • 应纳税暂时性差异是调增还是调减
  • 金税盘维护费申报
  • 提供劳务企业所得税纳税义务发生时间
  • 回购股份限售
  • 个人转让房产涉税政策
  • 未取得房屋产权证的房屋法院可以拍卖吗
  • 增值税发票验证
  • 企业取暖费怎么做会计分录
  • 合伙企业缴纳税款时间
  • 过路费抵扣税率是多少
  • 预缴企业所得税税率
  • 给职工买的意外险怎么做账
  • 7月3日事业单位
  • 营改增后建筑业怎么开票
  • 没有经营的空壳公司可以贷款吗
  • 管理费用劳务费现金流
  • 小企业财务入账的办公用品有什么?
  • 单位应当为职工创造有益于健康的环境和条件
  • linux耳机插拔检测
  • windows 10输入法
  • 计提的跌价准备销售时怎么处理
  • 取得进账发票没发票
  • 补缴配套费
  • 国际重复征税的类型及范围
  • 政府补贴专项资金使用要求
  • win11怎么添加字体到个性化
  • 结转消费税的会计分录
  • 印花税税收优惠政策2023
  • 分配结转制造费用时借方科目
  • 以分期收款方式销售货物的按照什么日期确认收入的实现
  • 小微企业所得税税收优惠政策2023年
  • 座头鲸救人
  • 编制资产负债表的基础
  • 投资收益如何做账务处理
  • vue动态路由是什么
  • 使用命令查看
  • php7匿名函数
  • 可变现净值高于成本是什么意思
  • 资产负债表日后调整事项
  • 网站用masonry瀑布流无限加载重叠解决方法
  • 虚开普票的立案标准
  • 增值税抵扣明细网络超时怎么处理
  • 销售车位应怎么交税
  • 存货按照计划成本法核算内容
  • 发票清单如何开具呢?
  • mysql如何调优
  • 建筑业普票与专票怎么抵扣
  • 出差餐补算在工资里吗
  • 存货价值的计算公式
  • 加工费的预付款是什么
  • 采购固定资产怎么做账
  • 施工项目部主要职责
  • 递延所得税资产和递延所得税负债
  • 合同权利义务包含债务吗
  • 缴纳社保记账凭证怎么开
  • 间接费用的分配公式
  • 材料人工制造费用是什么成本
  • 原材料登记什么明细账
  • 房地产会计相关内容
  • mysql详细教程
  • Mysql 5.7.9 shutdown 语法实例详解
  • mysql5.7.27安装
  • win1 开机启动
  • mssecsvc是什么进程
  • linux ssh免密码
  • 关于linux操作系统的描述中
  • linux操作系统的安装步骤
  • jquery示例
  • jquery中获取元素里边内容用什么方法
  • cocos游戏开发教程
  • node.js教程详细
  • vtune自动安装脚本分享
  • Python列表list
  • python模块怎么用
  • Python遍历文件夹中的图片
  • jquery :not
  • 深圳市税务局陈建新
  • 收到银行手续费发票怎么做分录
  • 陕西省西安市国家民用航天产业基地邮编
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设