我希望我的常量取决于HTTP_HOST
的值 if ($_SERVER['HTTP_HOST'] == 'localhost') {
const DB_HOST = 'localhost';
const DB_USER = 'root';
const DB_PASS = 'andrea00';
const DB_NAME = 'ciaociao';
} else {
// db www.corsocomputer.com
const DB_HOST = 'localhost';
const DB_USER = 'root';
const DB_PASS = 'andrea00';
const DB_NAME = 'ciaociao';
}
我有这个,这段代码没问题。
但我想用类似
的类写这个class Context {
const NomeAttivita = 'test test test';
}
但我不知道怎么写类
答案 0 :(得分:0)
您可以使用define()
来定义具有全局范围的常量,因此可以在您的类中访问。使用全局范围应该谨慎而不是经常进行,但对于类似主机名的东西,它可能是合适的:
define('HTTP_HOST', $_SERVER['HTTP_HOST'])
class Context {
function doSomethingWithHost(){
echo HTTP_HOST;
}
}
答案 1 :(得分:0)
我建议制作一个php文件,就像配置文件一样。 然后使用define()显式定义常量。这些将适用于包括它在内的所有脚本。
制作这样的课程:
class Context {
const DB_HOST = 'localhost';
const DB_USER = 'root';
const DB_PASS = 'andrea00';
const DB_NAME = 'ciaociao';
}
将使变量只对类实例和子项可访问。
对于您的上下文类,您可以导入" db设置"对于数据库连接类,您可以在类构造函数中从配置文件中设置类变量:
配置文件:
define ("DB_HOST", "localhost");
班级:
class database{
private $dbHost;
function __construct() {
$this->dbHost= DB_HOST;
}
通过这种方式,当您需要常量时,只需包含它们,就可以将它们添加到多个类中。如果更改配置,更改将反映到您的所有应用程序。 在类中硬编码define()是一种不好的做法。
答案 2 :(得分:0)
您可以在配置文件中全局定义常量,并在类中访问它们,如下所示。通常,数据库详细信息在开发和实时服务器上会有所不同,因此使用此语法。
define( 'DB_HOST', $_SERVER['HTTP_HOST']=='localhost' ? 'localhost' : 'server1.domain.co.uk' );
define( 'DB_USER', $_SERVER['HTTP_HOST']=='localhost' ? 'root' : 'dbo12345' );
define( 'DB_PASS', $_SERVER['HTTP_HOST']=='localhost' ? 'andrea00' : 'xyR40VklAp01M' );
define( 'DB_NAME', $_SERVER['HTTP_HOST']=='localhost' ? 'ciaociao' : 'db12345' );
class Context {
const db_host=DB_HOST;
const db_user=DB_USER;
const db_pwd=DB_PASS;
const db_name=DB_NAME;
public function __construct(){
}
public function showconstants(){
echo self::db_host, self::db_user, self::db_pwd, self::db_name;
}
}
$ctx=new Context;
$ctx->showconstants();
$ctx=null;