簡體   English   中英

PHP中的設計模式和OOP?

[英]Design pattern and OOP in PHP?

我一直在使用PHP和更多的OOP語言,並且仍然想知道PHP和類似語言中的設計模式和OOP的含義。

我的項目中有一些模塊:新聞,論壇......每個模塊都可以通過調用它來訪問主類。

  • 主要類路由頁面〜>指向新聞/文章,新聞/類別。
  • 有一些模塊設置/變量。

每個模塊中的子類處理這些特定的功能/頁面。

這個型號的最佳設計模式是什么? 創建類的實例或它的孩子?

現在,我初始化一個類,並訪問子類靜態方法,如下面的示例。 但我讀過使用靜態方法可以減慢代碼?

class news {
  __construct() {
     // define module settings
     ...
     // routing all module pages
     categories::list();
  }
  function modulesetting() {}
}
class categories extends news {
  static function list() {}
}

只是為了表明我的意思(放輕松):

文件夾結構:

/index.php
/autoload.php
/IModule.php
/IPage.php
/BaseModule.php
/modules/
/modules/News.php
/modules/News/
/modules/News/Categories.php
/modules/News/Acticle.php
...

的index.php

require_once('./autoload.php');

// based on request select which module to use
$moduleName = 'News';
$page = ('module\\'.$moduleName)::route();
$page->render();

autoload.php

function __autoload($classname) {
    $filename = __DIR__ . '/'. $classname . '.php';
    include_once($filename);
}

IModule.php

interface IModule {
    public static function route();
    //protected function moduleSettings();
}

IPage.php

interface IPage {
    public function render();
}

BaseModule.php

abstract class BaseModule implements \IModule {
    // fundamental stuff
}

News.php

namespace modules;

class News extends \BaseModule {
    protected $someProperty;

    __construct() {
       // define module settings
    }

    public static function route(){
        // routing all module pages, based on request        
        $page = 'modules\News\Categories';
        return new $page;
    }

    protected function moduleSettings(){ ... }
}

Categories.php

namespace modules\News;

class Categories extends \module\News implements \IPage {

    public function render() {
        /* access to module news */
        $this->someProperty;
        $this->moduleSettings(); /* or if method moduleSettings is overwriten then */ parent::moduleSettings();
        /* for example */  
        echo '<html></html>';
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM