首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP7构造函数类名称

PHP7构造函数类名称
EN

Stack Overflow用户
提问于 2016-04-01 01:20:21
回答 2查看 63.6K关注 0票数 29

我有一个Laravel4.2应用程序,它可以在PHP5上运行,没有任何问题。因为我安装了一个运行PHP7的新的流浪箱,所以当我运行一个函数名与类名(关系函数)相同的模型时,就会出现一个错误,如下所示:

代码语言:javascript
复制
<?php

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Participant extends \Eloquent
{

    use SoftDeletingTrait;

    [...]

    public function participant()
    {
        return $this->morphTo();
    }

    [...]    

}

我得到以下错误消息:

与其类同名的

方法在未来版本的PHP中将不再是构造函数;Participant有一个已弃用的构造函数(视图:...)

所以直到今天我才知道,在PHP4中,同名的方法是类的构造器。嗯。我真的是一个糟糕的程序员...但在这种情况下,根据我对PHP7中发生的事情的理解,它们纠正了我的一个失败,因为我从来不想使用这个函数作为构造函数,因为它只定义了一个有说服力的关系。

但是我怎样才能摆脱这条消息呢?据我所知,在PHP4中我的代码有but,但在PHP7中没有,对吧?如果没有必要,我不想重构这个函数,因为它在几个地方使用。

有人能解释一下我做错了什么吗?为什么它能在老版本的PHP上工作?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-01 01:37:11

据我所知,在PHP4中我的代码是错误的,但在PHP7中不是这样,对吧?

不完全是。Php4风格的构造器仍然在PHP7上工作,它们只是被弃用了,它们将触发一个弃用的警告。

您可以做的是定义一个构造方法,即使是一个空的方法,这样php4- __construct方法就不会在新创建的类实例上被调用。

代码语言:javascript
复制
class foo
{
    public function __construct()
    {
        // Constructor's functionality here, if you have any.
    }

    public function foo()
    {
        // PHP4-style constructor.
        // This will NOT be invoked, unless a sub-class that extends `foo` calls it.
        // In that case, call the new-style constructor to keep compatibility.
        self::__construct();
    }
}

new foo();

它适用于旧的PHP版本,原因很简单,因为构造函数没有得到返回值。每次创建Participant实例时,都会隐式调用participant方法,仅此而已。

票数 49
EN

Stack Overflow用户

发布于 2016-04-01 01:42:12

PHP 4样式构造函数(与定义它们的类同名的方法)已被弃用,并将在将来删除。如果PHP4构造函数是类中定义的唯一构造函数,则PHP7将发出E_DEPRECATED。实现__construct()方法的类不受影响。

代码语言:javascript
复制
<?php
    class foo {
        function foo() {
            echo 'I am the constructor';
         }
     }
?>

您可以保留旧的构造函数,但您需要添加一个新的构造,就像这样:

代码语言:javascript
复制
use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Participant extends \Eloquent
{

    use SoftDeletingTrait;

    [...]

    public function __construct()
    {
        return $this->morphTo();
    }

    public function participant()
    {
        return $this->morphTo();
    }

    [...]    

}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36339774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档