PHP:用用户定义的数组替换默认数组?(更换/联合收割机)
我正在为自己编写一个小框架来帮助构建我的站点,我当前的示例是一个用于启动HTML页面的对象函数,它将如下运行: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
$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(或任何您的主页):
几点注意:
编辑:我忘了提到,通过使用具有默认值的构造函数,您可以获得所需的功能,即拥有默认值,但也可以覆盖它们。感谢您回答最初的问题,我对此有更多的了解。您是对的,我的半面向对象方法缺乏实际实现,我现在将以类和扩展类为基础。非常感谢。