【发布时间】:2017-09-09 18:00:42
【问题描述】:
嗨,我真的很糟糕,而且是 PHP 的新手。需要一些帮助。
我正在尝试在我的网站中定义一些常量:
代码 1
define('SITE_ROOT',$_SERVER['DOCUMENT_ROOT'] . '/');
// Check if CORE_PATH is already defined else define here
defined('CORE_PATH') or define('CORE_ROOT', SITE_ROOT . '/CORE');
define('INC_PATH', IAO_ROOT . '/inc/');
define('LAYOUTS_PATH', IAO_ROOT . 'layouts/');
define('BLOCKS_PATH', SECTIONS_PATH . 'blocks/');
define('STATIC_PATH', BLOCKS_PATH . 'static/');
除了上面的例子,我还有另外 10-15 个常量要定义。我想知道在一行中定义每个常量是否正确,或者我可以执行以下操作:
代码 2
define (
$constant = array (
'SITE_ROOT',
'CORE_PATH',
'INC_PATH' ,
'LAYOUTS_PATH',
'BLOCKS_PATH',
'STATIC_PATH'
),
$path = array(
$_SERVER['DOCUMENT_ROOT'] . '/',
SITE_ROOT . '/CORE',
CORE_PATH . '/inc',
CORE_PATH . '/layout',
CORE_PATH . '/blocks',
CORE_PATH . '/static'
)
);
define ( $constant, $path);
虽然 代码 1 在我的网站上运行良好,但 代码 2 不适合我。 请告诉我正确的方法是什么。
更新: 根据@LasVegasCoder 更新了这个问题。不工作。
<?php
//Create array of paths --example from your path ***use right paths***;
$path = array(
'SITE_ROOT . ' => $_SERVER['DOCUMENT_ROOT'],
'CORE_PATH' => SITE_ROOT . '/core',
'INCLUDE_PATH' => SITE_ROOT . '/inc',
'LAYOUT_PATH' => SITE_ROOT . '/layout',
'BLOCK_PATH' => SITE_ROOT . '/blocks',
'STATIC_PATH' => SITE_ROOT . '/static'
);
//usage:
createPath( $path );
//Testiing
echo SITE_ROOT; ?></br>
<?php echo CORE_PATH; ?></br>
<?php echo INCLUDE_PATH; ?></br>
<?php echo LAYOUT_PATH; ?></br>
<?php echo BLOCK_PATH; ?></br>
<?php echo STATIC_PATH; ?></br>
<?php
function createPath( $path )
{
if( empty( $path ) )
{
die("Array of path required!");
}
foreach( $path as $constant => $path )
{
if(!defined( strtoupper($constant) ) )
{
define( strtoupper($constant), $path . '/');
}
}
}
好吧,它仍然不起作用。有什么想法和解决方案吗?
【问题讨论】:
-
一个函数只能有一个返回值。
define_constants()函数仅返回$constant。 -
而
$constant将保存像'SITE_ROOT'这样的文字字符串,而不是实际的常量。 -
@BenM 你介意给我正确的代码来实现我想要的吗?
-
您没有定义 CONSTANT 您定义的字符串数组,并且第一次返回被触发
return $constant它返回保存在变量$constant中的字符串数组,您必须使用define来完成过程 -
define只接受带有常量名称和标量值的字符串。它不接受数组。为此,您必须使用array_map或foreach。