【问题标题】:PHP: Replacing default array with user defined array? (replace/combine)PHP:用用户定义的数组替换默认数组? (替换/组合)
【发布时间】:2011-01-03 06:08:35
【问题描述】:

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

$page->head(array(
    'doctype' => 'html4',
    'description' => 'My page'
    //etc
));

我希望有一个默认数组(如head() 中定义的那样)具有默认值,以防它们未定义。它可能看起来像这样:

$defaults = array('doctype' => 'html5', 'author' => 'default', ...);

在调用时,用head 函数的参数中定义的元素替换每个默认元素的最佳方法是什么?

我发现了可能是这样的东西,不确定它到底做了什么,但它有正确的想法 http://www.php.net/manual/en/function.array-replace.php#94458

【问题讨论】:

    标签: php arrays frameworks replace config


    【解决方案1】:

    听起来你可以用 array_merge 做到这一点,像这样:

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

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

    【讨论】:

    • 感谢您回答原来的问题,我对此了解更多。
    【解决方案2】:

    您是否有理由不为此使用类?这听起来就像一个可以从 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(或任何你的主页):

    var $page = new BasePage(null, 'Home Page');
    $page->render();
    

    几个注意事项:

    1. 这是一个非常简单的例子 我没有测试过
    2. 我知道这不是真的 你在寻找(因为你是 为您的阵列寻找解决方案 问题),但我正在开发一个 自己的小框架,这是 绝对是我要走的路 这样做有明显的好处 在任何环境中使用 OOP。

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

    【讨论】:

    • 你说得对,我的半面向对象方法缺乏实际的实现,我现在将它基于类和扩展类。谢谢。
    猜你喜欢
    • 2012-01-26
    • 1970-01-01
    • 2014-03-31
    • 2012-03-13
    • 2013-11-16
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多