位置: 编程技术 - 正文

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

  • 账面金额是包含什么?
  • 增值税票是什么
  • 财务刷卡手续费怎么处理
  • 同一控制下长期股权投资相关税费
  • 免征增值税和增值税区别
  • 5个点的税点
  • 现金股利和现金利润的区别
  • 企业所得税不含税价格怎么算
  • 利润总额与毛利的区别
  • 预缴增值税城建怎么算
  • 房地产企业净利润为负的原因
  • 预收账款有余额是啥原因
  • 营业执照三证合一是哪一年开始的
  • 发票抵扣联认证抵扣分录
  • 个体户查账征收怎么交税?
  • 发票的红字发票怎么开
  • 企业固定资产职称是什么
  • 开的是全额发票但是有分包如何做账务处理?
  • 合并报表中长期股权投资包括
  • 汽车违章罚款在哪里缴纳
  • 无偿受让股权的股东对发起股东没有出资承担责任
  • 汽车销售行业的现状及发展趋势
  • 小规模纳税人免征增值税怎么记账
  • 核销坏账的会计处理分录
  • 营销活动的意义是什么
  • 未确认融资费用的期初余额
  • 出口退税进口免税
  • 保险保障基金的管理单位是
  • 保安费用分录
  • 冲暂估怎么做分录
  • win10 100g不够
  • ie浏览器打开后显示已停止工作
  • 如何让解决中世纪基督教世界黑暗
  • 本期填写的适用3减1政策的本期发生额大于
  • 软件产品登记证书官费
  • PHP:mb_strimwidth()的用法_mbstring函数
  • 从银行提取现金准备发放工资
  • php system函数的用法
  • Vue vue.config.js 的详解与配置
  • 税务新政策解读
  • 应收账款项目在资产负债表怎么填列
  • 业务招待费的账务处理金额
  • yolov7训练自己的模型用 flask封装
  • php is_a
  • 微信小程序支付接口调用
  • 【强化学习】Q-Learning算法详解
  • python设置断点
  • 企业从政府部门辞职流程
  • dedecms采集怎么用
  • 前端动画库
  • 出口发票已经抵扣认证怎么办
  • 允许抵扣的进项税
  • 平行结转分步法各步骤的费用
  • 应缴国库款和应缴财政专户款有什么区别
  • 库存商品盘点制度
  • 应收票据的计价应按
  • 领用生产用原材料一批
  • 预缴所得税会计分录怎么做东奥
  • 所有者权益包括少数股东权益吗
  • 收到增值税专用发票是进项还是销项
  • 体检费可以开个人吗?
  • 企业应付职工薪酬增加说明什么
  • 定额发票累计领取怎么算
  • 加盟费交税
  • 网上充值平台不能提现怎么办
  • 劳务费如何做账务处理
  • win8系统安装教程图解
  • wdcp的/www目录大小调整或增加分区/硬盘的方法
  • win8的应用商店
  • ubuntu写脚本
  • 重装系统开机出现几个系统
  • win7系统电脑蓝牙在哪里
  • python 读中文文件
  • js的点击事件怎么做
  • javascript常见问题
  • 江西国家税务局官网
  • 香港企业查询系统
  • 个人土地建房
  • 公司以融资租赁形式从事非法放贷业务,,能否让法院判
  • 报税卡丢了要怎么处理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设