【问题标题】:OOP functionname acting as __construct when its the same name as the class当与类同名时,OOP 函数名充当 __construct
【发布时间】:2010-02-11 08:42:45
【问题描述】:

标题有点长,归根结底:

<?php

    class error
    {

        public function error($errormsg = false, $line = false)
        {

            echo 'errormsg: '.$errormsg.' on line: '.$line;

        }

    }

?>

当我在另一个文件中调用这个类时,例如:

<?php

    $error = new error;

?>

它已经在函数'error'中执行了回显。当函数名称相同时,该函数是否继承了与 __construct 相同的行为,还是我只是错过了一些非常愚蠢的事情(我是初学者 :))

提前发送

【问题讨论】:

  • 在 C# 中,构造函数的名称与类相同,是否定义了函数 __construct?如果不是,则可能默认为具有相同名称的那个。如果 PHP 是这样工作的,我会称它为功能,而不是问题。上学期我开始学 php,我们刚接触 oop,一开始感觉很奇怪。这个学期我要上 C# 课,这都是关于 OOP 的。我会明确地将这些知识应用到我的 PHP 暑期项目中。 OOP 绝对值得学习曲线。看看吧,作为学生,您可以从 www.DreamSpark.com 免费获得 Visual Studio 08 Professional

标签: php oop constructor class


【解决方案1】:

这个:

   class error
    {

        public function error($errormsg = false, $line = false)
        {

            echo 'errormsg: '.$errormsg.' on line: '.$line;

        }

    }

是php4的做法,考虑一下:

   class error
    {

        public function __construct($errormsg = false, $line = false)
        {

            echo 'errormsg: '.$errormsg.' on line: '.$line;

        }

    }

两者都是一样的,第一个是php4方式,后面是php5方式。

【讨论】:

    【解决方案2】:

    是的,它与__construct()具有相同的行为

    这是因为其他语言中的许多其他 OOP 实现都使用相同的名称。因此 PHP 遵循这一点,因此这样做。

    【讨论】:

      【解决方案3】:

      __construct() 函数相同。

      参见 PHP 手册:

      为了向后兼容,如果 PHP 5 找不到 __construct() 函数 对于给定的类,它将搜索 旧式构造函数,由 类的名称。实际上,它 意味着唯一的情况 有兼容性问题是如果 类有一个名为 __construct() 的方法 用于不同的 语义。

      如果你声明两个函数 __construct() 在 PHP5 中调用,error() 在 PHP4 中调用

      【讨论】:

        【解决方案4】:

        在 PHP4 中,构造函数与类同名。我相信如果你定义一个__construct 函数,它应该会阻止调用PHP4 风格的构造函数。这种行为记录在constructors PHP 手册页上,并且是防止调用 PHP4 样式构造函数的唯一方法,无需编辑 PHP 源代码并重新构建它。

        另一种解决方案是重命名该方法。 error::error 对我来说有点奇怪。考虑error::logerror:report 之类的东西,这似乎更合适。

        【讨论】:

          猜你喜欢
          • 2011-10-15
          • 2020-10-19
          • 2012-09-17
          • 1970-01-01
          • 2017-10-05
          • 1970-01-01
          • 2011-05-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多