2014-02-21 25 views
2

我有一個名爲Page的類,它爲當前頁面加載一個PHP文件,其中包含所有的HTML(模板文件)。在我的模板文件中,我想要使用其他對象的實例,這些實例在Page類(例如User,PDO或其他類)之外初始化。我的問題是,我如何以最聰明的方式做到這一點。使用另一個PHP類的許多不同對象內部實例的最佳方式是什麼?

在我的網頁類我有裝載我的模板文件(包含所有的代碼爲我的GUI的方法稱爲get_page()。

public function get_page() { 
     // Load theme template 
     ... 

     $template_file = ABSPATH_THEME . 'tpl.' . $result['template_file'] . '.php'; 

     if(file_exists($template_file)) { 
      $page = require_once($template_file); 
      return $page; 
     } 
    } 

正如你看到的模板文件是我的Page類裏面裝,因此,這不是要訪問我的網頁類的外部初始化類的實例

我能拿出不同的解決方案:

1)我通過不同類別的所有實例上我的課頁面,構建我的網頁時。我認爲這是正確的方式,但是如果我在設計中需要5,10或20個不同的物體,這可能非常複雜。

2)找到一種方法將模板文件包含在Page類之外,但是從get_page()函數觸發 - 不知道如何做到這一點,以及它是否是一個好的解決方案?

你能告訴我什麼是最好的,如果有更好的方法來做到這一點?

+0

聽起來不錯的選擇是使用像Smarty這樣的模板引擎 –

+0

我曾考慮過使用SMARTY,但我決定不使用,因爲我想完全控制我的主題支持。我用這種方式對我來說效果很好。但是,如果我可以編寫我的模板,就好像它不在類中一樣。 – mschadegg

回答

0

你可以在你的php的頂部加上類,例如: /CLASSPATH/ClassName.php

然後你就可以一次創建該類的實體,並用它無處不在

如。 $ entity = new ClassName();

0

我認爲你最好的選擇是將它們作爲參數傳遞,這取決於你需要的東西,你可能想讓它們成爲屬性。

編輯:這是假設通過「使用其他對象的實例」,您的意思是您需要使用已在別處實例化的對象。

+0

是我的意思。我在創建一個Page的實例之前檢查用戶數據。但需要我的主題內的用戶數據。將它們作爲參數傳遞也是我現在所做的。但如果我可以在模板中編寫我的代碼,就好像它是在類之外加載的那樣。 – mschadegg

0

如果「其他類的istances」你的意思是其他generical對象(你提到的PDO和用戶這是全球海洋觀測系統這方面的例子),我會存儲這些的$_SESSION陣列(或$_GLOBAL陣列,$_SESSION是在最好的選擇在大多數情況下)。

然後,你可以通過使用$_SESSION['PDO']->...和類似

最流行的方法的
0

一個處理PHP應用程序生根是實現MVC設計百通,或使用MVC框架訪問它們。 Google'MVC php'的詳細信息,祝你好運。

0

看看功能get_defined_varsextract。使用這些可以將變量從一個範圍導出到另一個範圍。

一個愚蠢的例子可能是:函數將本地定義的變量傳遞給函數B.

function A() 
{ 
    $var1 = "1"; 
    $var2 = "2"; 
    // etc 

    $data = get_defined_vars(); 
    B($data); 

} 

function B($data) 
{ 
    extract($data); 
    // somescript.php can use $var1, $var2, etc if B is call from A. 
    require("somescript.php"); 
} 

A(); 
相關問題