我有一个实用程序类,名为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中包含一次吗?
答案 0 :(得分:0)
根据我的理解,您可能多次包含emailUtility.php文件,并且因为类被覆盖而导致程序崩溃。 只需替换
下面的行include("emailUtility.php");
与
include_once("emailUtility.php");
答案 1 :(得分:0)
冲突的两个原因:
无法在PHP中重新声明类。通过使用include
,您将脚本包括两次,因此类被声明两次,因此致命错误。
您忘记在类名中声明方法/变量。语法错误。
尝试启用错误报告,以查看操作中的错误而不是白页。在应用程序的最早版本中包含此行:error_reporting(E_ALL);
。 Check doc here
<强>解决方案强>
改为include
改为include_once
。
include
将包含一个脚本,并在未找到脚本时显示警告include_once
将严格包含一次脚本,如果找不到脚本则显示警告require
将包含一个脚本,并在未找到脚本时抛出致命错误require_once
将包含一次脚本,并在未找到脚本时抛出致命错误
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
。它使代码更具可读性。