Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:用用户定义的数组替换默认数组?(更换/联合收割机)_Php_Arrays_Frameworks_Replace_Config - Fatal编程技术网

PHP:用用户定义的数组替换默认数组?(更换/联合收割机)

PHP:用用户定义的数组替换默认数组?(更换/联合收割机),php,arrays,frameworks,replace,config,Php,Arrays,Frameworks,Replace,Config,我正在为自己编写一个小框架来帮助构建我的站点,我当前的示例是一个用于启动HTML页面的对象函数,它将如下运行: $page->head(array( 'doctype' => 'html4', 'description' => 'My page' //etc )); $defaults = array('doctype' => 'html5', 'author' => 'default', ...); $page->head(arr

我正在为自己编写一个小框架来帮助构建我的站点,我当前的示例是一个用于启动HTML页面的对象函数,它将如下运行:

$page->head(array(
    'doctype' => 'html4',
    'description' => 'My page'
    //etc
));
$defaults = array('doctype' => 'html5', 'author' => 'default', ...);
$page->head(array_merge($defaults,array(
  'doctype' => 'html4',
  'description' => 'My Page'
  // etc
)));
我希望有一个默认数组(如
head()
中所定义),以便在未定义默认值的情况下具有默认值。可能是这样的:

$page->head(array(
    'doctype' => 'html4',
    'description' => 'My page'
    //etc
));
$defaults = array('doctype' => 'html5', 'author' => 'default', ...);
$page->head(array_merge($defaults,array(
  'doctype' => 'html4',
  'description' => 'My Page'
  // etc
)));
调用时,用
head
函数参数中定义的元素替换每个默认元素的最佳方法是什么

我发现可能是这样的,不确定它到底是做什么的,但它有正确的想法

听起来您可以通过array\u merge来实现这一点,如下所示:

$page->head(array(
    'doctype' => 'html4',
    'description' => 'My page'
    //etc
));
$defaults = array('doctype' => 'html5', 'author' => 'default', ...);
$page->head(array_merge($defaults,array(
  'doctype' => 'html4',
  'description' => 'My Page'
  // etc
)));

这将用新值覆盖
$defaults
中的任何值,同时保留没有新值的任何键。

您不为此使用类有什么原因吗?这听起来就像是一个可以从OOP中获益的问题。例如:

class PageHeader
{
    private $m_sDoctype;
    private $m_sDescription;
    // other member vars, such as an array of css files

    function __construct($doctype, $desc)
    {
        // set your default values
        $this->m_sDoctype = _isset($doctype) && $doctype != null ? $doctype : 'html4';
        $this->m_sDescription = _isset($desc) && $desc != null ? $desc : 'My Page';
    }

    function render()
    {
        // dump out html however you see fit
    }
}

class BasePage
{
    private $m_oPageHeader;
    // other member vars

    function __construct($doctype, $desc)
    {
         $m_oPageHeader = new PageHeader($doctype, $desc);
    }

    function render()
    {
        $this->m_oPageHeader->render();
    }
}
index.php(或任何您的主页):

几点注意:

  • 这是一个非常简单的例子 我还没有测试过
  • 我知道这不是真的 你一直在寻找(就像你一样) 正在寻找阵列的解决方案 问题),但我正在开发一个 我自己的小框架,这是 我肯定会这么做的 这样做有明显的好处 在任何环境中使用OOP

  • 编辑:我忘了提到,通过使用具有默认值的构造函数,您可以获得所需的功能,即拥有默认值,但也可以覆盖它们。

    感谢您回答最初的问题,我对此有更多的了解。您是对的,我的半面向对象方法缺乏实际实现,我现在将以类和扩展类为基础。非常感谢。