在PHP中创建另一个类的对象的正确方法是什么?

时间:2014-06-21 04:58:02

标签: php

我有一个实用程序类,名为emailUtility.php,如下所示:

<?php
class emailUtility
{
    public function SendMail($subject,$body)
    {               

    }

}
?>

我还有两个类,我想使用emailUtility类的SendMail方法。 我有第一堂课(Test1.php)使用emailUtility,如下所示。

<?php
include("emailUtility.php")
class Test1
{
    $emailUtil=new emailUtility();
    $emailUtil->SendMail("","");
}

?>

现在,当我尝试以同样的方式在另一个类中使用相同的emailUtility类时,它无法正常工作。但是,当我从Test1中删除使用emailUtility时,Test2工作正常。 不工作意味着在浏览时,不会为同一文件中的其他代码生成HTML。

<?php
include("emailUtility.php")
class Test2
{
    $emailUtil=new emailUtility();
    $emailUtil->SendMail("","");
}

?>

如何在多个其他类中使用一个类? 另外,是这样一个类只能在php中包含一次吗?

2 个答案:

答案 0 :(得分:0)

根据我的理解,您可能多次包含emailUtility.php文件,并且因为类被覆盖而导致程序崩溃。 只需替换

下面的行
include("emailUtility.php");

include_once("emailUtility.php");

答案 1 :(得分:0)

冲突的两个原因:

  1. 无法在PHP中重新声明类。通过使用include,您将脚本包括两次,因此类被声明两次,因此致命错误。

  2. 您忘记在类名中声明方法/变量。语法错误。

  3. 尝试启用错误报告,以查看操作中的错误而不是白页。在应用程序的最早版本中包含此行:error_reporting(E_ALL);Check doc here

    <强>解决方案

    1. 改为include改为include_once

      Differences

      • include将包含一个脚本,并在未找到脚本时显示警告
      • include_once将严格包含一次脚本,如果找不到脚本则显示警告
      • require将包含一个脚本,并在未找到脚本时抛出致命错误
      • require_once将包含一次脚本,并在未找到脚本时抛出致命错误

    2. 2.声明你的Test1.php如下:

      <强> Test1.php

      <?php
      include_once("emailUtility.php");
      class Test1 {
          /**
           * @var emailUtility
           */
          public $emailUtility;
      
          public function __construct() {
      
              //Note that we usually define class names as CamelCase "EmailUtility"
              //so it will be much more readable. For this case, ideal case should be
              //$this->emailUtility = new EmailUtility();
      
              $this->emailUtility = new emailUtility();
          }
      
          /**
           * My send email
           */
          public function mySendEmail() {
              $this->emailUtility->SendMail();
          }
      }
      

      Test2.php应遵循相同的声明。

      需要注意的一点是,将类名定义为CamelCase始终是一种很好的做法,例如EmailUtility。它使代码更具可读性。