2011-01-03 12 views
0

自分自身が自分のサイトの構築を支援するために、私は小さなフレームワークを書いていますが、私の現在の例では、HTMLページを開始するための目的関数である(コンバイン/置き換え)、次のように走ったことになります。PHP:デフォルトの配列をユーザ定義の配列に置き換える?

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

私は望みます(head()で定義された)デフォルト配列を定義しない場合のデフォルト値を持つようにします。それは次のようになります。

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

呼び出されたときにどのようなhead関数の引数で定義された1と各デフォルトの要素を交換するための最良の方法だろうか?

は、私はそれが正確に何をするかが不明であること、多分このようなものを見つけましたが、それはそれはあなたがこのように、array_mergeでこれを行うことができるかもしれませんように聞こえる正しい考え http://www.php.net/manual/en/function.array-replace.php#94458

答えて

0

これにはクラスを使用していない理由はありますか? 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. これは非常に単純化した例 I避難所でありますテストしました
  2. 私はこれが本当に何であるか知っています あなたが探していた(あなたは があなたの配列 問題への解決策を探していたもの)が、私は自分のために 小さなフレームワークを開発していた、これは間違いなく、私は明確なメリットがあるように、約 はそれをやって行くと思い OOPを使用する方法 ですどんな環境でも。

編集:既定値を持つコンストラクタを使用することで、既定値を持つだけでなく、上書きする機能を持つことができます。

+0

あなたは正しいです、私の半OOのアプローチは実用的な実装が欠けていたので、私はそれをクラスから外してクラスを拡張します。ありがとうございました。 –

2

あります

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

$defaultsの値を新しい値で上書きしますが、新しい値を持たないキーは保持します。

+0

元の質問にお答えいただきありがとうございます。私はこれについてさらに理解しています。 –

関連する問題