【问题标题】:PHP define multiple constants in an arrayPHP在一个数组中定义多个常量
【发布时间】: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_mapforeach

标签: php arrays constants


【解决方案1】:

动态创建路径

使用这个小函数,您可以将路径创建为键 => 值的数组,然后将其传递给函数来为您的应用程序创建路径。

  • 创建路径数组

    在这个问题中使用示例 -- 使用正确的路径

      $path = array(
            'SITE_ROOT'   => $_SERVER['DOCUMENT_ROOT'],
            'CORE_PATH' => '/core',
            'INCLUDE_PATH' => '/inc',
            'LAYOUT_PATH' => '/layout',
            'BLOCK_PATH' => '/blocks',
            'STATIC_PATH' => '/static'
        );
    

    使用函数创建路径:

    createPath( $path );

  • 测试路径

    echo CORE_PATH;

  • 输出

    /核心/

创建一个函数来处理路径。

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( strtoupper($constant), realpath( dirname( __FILE__) ) . $path . '/');
        }
    }
}

youpage.php

<?php
/**Create array of paths  array of $constant to $path;
 * i.e $path = array( 'THIS_CONSTANT' => '/this/path', 'WEB_ROOT' => '/path/to/webroot' );
 *  usage:
 *  `createPath( $path );` 
 *  Test: `echo WEB_ROOT;`  OUTPUT: '/path/to/webroot/'
 *
 * - How to Include another scripts:

 * require_once CORE_PATH . 'Config.php';
 * require_once INCLUDE_PATH . 'Database.php';
 * require_once LAYOUT_PATH 'Header.php';
 * require_once LAYOUT_PATH 'Body.php';
 * require_once LAYOUT_PATH 'Footer.php';
*/
 $path = array(
        'SITE_ROOT'   =>   $_SERVER['DOCUMENT_ROOT'],
        'CORE_PATH' => '/core',
        'INCLUDE_PATH' => '/inc',
        'LAYOUT_PATH' => '/layout',
        'BLOCK_PATH' => '/blocks',
        'STATIC_PATH' => '/static'
    );

 //usage:
 createPath( $path );

// Test. You can echo path, include | require e.g:
 echo STATIC_PATH;


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( strtoupper($constant), realpath( dirname( __FILE__) ) . $path . '/');
        }
    }
}

测试DEMO Version online

希望这会有所帮助!

【讨论】:

  • 您好,感谢您尝试帮助我。我已根据您的建议更新了我的问题广告,但它不起作用。您能否使用有效的功能更新您的答案。
  • @VikramRao 你必须用你的真实应用程序路径更新常量,不要只是复制和粘贴,因为我不知道上面示例中使用的应用程序路径是否是你的真实路径
猜你喜欢
  • 1970-01-01
  • 2011-01-15
  • 2011-10-17
  • 2016-01-15
  • 2016-06-03
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多