位置: 编程技术 - 正文

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

  • 内蒙古注册税务师协会
  • 进项税和销项税怎么理解
  • 出口货物退免税管理办法
  • 实际已缴纳所得税额不自动带出
  • 本月无销售额,但是有进项,需要认证吗
  • 收到营业外收入流水账怎么做账
  • 教育培训学校怎么翻译
  • 未出资到位的股东
  • 装修公司开劳务费发票可以有材料进项票吗
  • 出口不退税进项税如何处理
  • 拓展费税收分类编码
  • 广告制作赚钱吗?
  • 固定资产贷款资料清单
  • 银行承兑汇票向谁追索
  • 企业外购消费品会计分录
  • 国家税务总局关于取消增值税扣税凭证
  • 不需要缴纳增值税的有
  • 质量罚款入什么科目
  • 个税申报中劳务报酬
  • 应付职工薪酬所得税汇算清缴
  • 报销款冲抵其他应收款怎么做账?
  • 购入低值易耗品计入什么科目
  • 事业单位存货包括
  • 公务费和业务费怎么算
  • 出租房电费怎么结算
  • 筹建期间的广宣费
  • win11怎么用win10界面
  • 酒店布草洗涤赔偿怎样折旧
  • rundll32进程很多
  • mac 如何u盘启动
  • 材料成本差异属于成本类账户吗
  • php中通过什么属性可以获取数组中元素的个数
  • 盈余积累转增股本什么意思
  • 连接云服务器超时
  • macos安装多版macos并存
  • php 时间
  • ChatGPT 被大面积封号,到底发生什么了?
  • springboot+chatgpt+chatUI Pro开发智能聊天工具
  • 自动驾驶车祸
  • vue开发教程
  • css代码怎么在浏览器运行
  • 技术服务行业增值税税税负率是多少
  • 租房发票怎么缴税
  • python time.ctime()如何做时间加减法
  • 成本会计的岗位要求
  • 电脑买回来可以直接用吗
  • 制造费用期末要结转吗
  • 新领的发票怎么导入uk开票系统
  • 企业办税人员如何实名认证
  • 建筑业增值税税负率
  • 住宿费用专票可以抵扣吗
  • 暂估成本的账务处理分录
  • 银行收到一笔款项企业尚未入账属于什么情况的未达账项
  • 收到承兑汇票如何写收据
  • 应交税金减免税科目
  • 外贸采购的职责
  • 所有者权益类期末贷方余额公式
  • 公司向股东借款最新规定
  • 车票抵扣填在申请表哪里
  • 企业印花税率
  • 企业工资薪金支出怎么确认
  • 合并报表成本法调整为权益法分录
  • 事假 扣工资
  • sqlserver多表查询 索引
  • linux的系统日志
  • linux磁盘空间不足怎么清理
  • yum下载已安装的包
  • win7定时静音
  • javascript新手教程
  • 批处理文件是可执行文件吗
  • python嵌套列表生成
  • 如何使用wordpress
  • google年会
  • 餐饮服务需要交印花税吗?
  • 小规模出售不动产怎么交税
  • 浙江税务打不开,提示新版本
  • 新入职税务干部工作心得
  • 耕地占用税减免税范围包括
  • 江苏地税局如何交社保
  • 明星征税多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设