2015-04-12 77 views
0

我对PHP的操作系统相当陌生,有些概念对我来说还是新的。从php类读取其他文件的常量/变量

Asumming我有包括配置文件(config.php文件):

<?php 

$siteName = "John's Site"; 
$siteEmail = "[email protected]" 
$replyTo = "[email protected]" 

而且我有一个简单的类(SendMail.php),其包括:

class SendMail 
{ 

    public function sendRegistrationMail($toAddress) 
    { 
     mail($toAddress, $subject, $email, "From: Site Name <[email protected]>"); 

    } 

} 

我有user.php文件,包括:

<?php 
include_once ('config.php'); 
include_once ('SendMail.php); 

//Initialize class 
$sendMail = new SendMail(); 

我问的是,如果我可以以某种方式读/包括config.php从发送电子邮件 而不需要硬编码"From: Site Name <[email protected]>" 因为我已经做了,当地址 的SendMail类,这样我可以简单地这样做:

$sendMail->sendRegistrationMail("[email protected]"); 

,而不需要通过“从”。

希望我很清楚。 如果任何人都可以提供帮助,那就太棒了。 谢谢!

+2

没有任何[常量](http://php.net/manual/en/language.constants.php)在这里定义....如果你的意思是变量,然后阅读[变量范围] (http://php.net/manual/en/language.variables.scope.php) –

回答

0

有了您的配置文件是正常的可运行PHP,你可以直接引用全局变量在你的SendMail类是这样的:

require_once dirname(__FILE__) . '/config.php'; 

class SendMail 
{ 
    public function sendRegistrationMail($toAddress) 
    { 
     global $siteName, $siteEmail, replyTo; 
     mail($toAddress, $subject, $email, "From: {$siteName} <{$replyTo}>"); 
    } 

} 

因为在你的配置变量是PHP和它们在全球范围内定义,包括该文件将使他们在这里访问。您只需在函数中指定您引用的变量是全局范围的变量,而不是全局关键字所做的新局部变量。

+0

谢谢。这被认为是一种好习惯吗?我读过某个地方, 全局变量不是一个好的做法?我应该坚持将“From:”地址指定为参数吗? – user3772

+0

一般而言,全局变量是不好的做法,因为程序的其他部分很容易与他们看不到你。对于配置文件,我通常会允许no globals规则的例外,因为它们往往是只读的,并且在很多地方都需要。尽管通过将他们定向到一个班级,您可以使自己的代码更清楚/更清晰。 – RyanW

+0

我同意!谢谢! – user3772

0

您可以使用类变量来指定可能的数据列表。 或者你可以创建包含你的配置文件的方法。 或者您可以在字符串表单中为方法添加第二个参数。

+0

我不想重新指定类变量中的电子邮件地址我想将它全部放在一个文件中。 我指定我没有试图用第二个参数来做。 所以,如果我创建一个读取配置的方法,config.php变量将可以从SendMail类中读取? – user3772