PHP MVC Framework Yapısı

1 Cevap php

Burada kod miktarı hakkında üzgünüm. Ben (umarım) karışıklığı kaçınarak anlayış için yeterince göstermeye çalıştık. I Pastebin de kod ikinci bir kopyasını dahil ettik. (Kod hatası / haber / uyarı vermeden yürütmek yapar.)

Model View Controller fikri uygulamak için çalışırken ben şu anda bir İçerik Yönetim Sistemi oluşturma. Ben sadece son zamanlarda (son bir hafta içinde) MVC kavramı rastlamak ve benim mevcut projeye bu uygulamaya çalışıyorum var.

CMS özelliklerinden biri dinamik / özelleştirilebilir menü alanları ve her özellik bir kontrolör tarafından temsil edilecektir. Bu nedenle Kontrolör Sınıf birden çok sürümü, belirli bir genişletilmiş işlevsellik her biri olacaktır.

Ben öğreticiler bir dizi baktı ve MVC Framework için bazı açık kaynak çözümleri okudum. Şimdi benim özel gereksinimleri için hafif bir çözüm oluşturmak için çalışıyorum. Ben geriye doğru uyumluluk, PHP 5.3 kullanıyorum ilgilenmiyorum. Baz sınıfının bir avantajı, global kullanımı doğrudan $this->Obj['ClassName']->property/function(); kullanarak herhangi bir yüklü sınıf erişebilir sahip değildir.

Hoping to get some feedback using the basic structure outlined (with performance in mind). Specifically;
a) Have I understood/implemented the concept of MVC correctly?
b) Have I understood/implemented Object Orientated techniques with PHP 5 correctly?
c) Should the class propertise of Base be static?
d) Improvements?

Şimdiden çok teşekkür ederiz!

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

/* A "Super Class" that creates instances */
class Base {

    public static $Obj = array(); // Not sure this is the correct use of the "static" keyword?    
    public static $var;

    static public function load_class($directory, $class)
    {
        echo count(self::$Obj)."\n"; // This does show the array is getting updated and not creating a new array :)
        if (!in_array($class, self::$Obj))  //dont want to load it twice
        {
            /* Locate and include the class file based upon name ($class) */
            return self::$Obj[$class] = new $class();
        }
        return TRUE;
    }
}

/* Loads general configuration objects into the "Super Class" */
class Libraries extends Base { 
    public function __construct(){
        $this->load_class('library', 'Database');
        $this->load_class('library', 'Session');
        self::$var = 'Hello World!';    //testing visibility
        /* Other general funciton classes */
    }
}

class Database extends Base {
    /* Connects to the the database and executes all queries */
    public function query(){}
}

class Session extends Base {
    /* Implements Sessions in database (read/write) */
}

/* General functionality of controllers */
abstract class Controller extends Base {
    protected function load_model($class, $method) {
        /* Locate and include the model file */
        $this->load_class('model', $class);
        call_user_func(array(self::$Obj[$class], $method));
    }
    protected function load_view($name) {
        /* Locate and include the view file */
        #include('views/'.$name.'.php');
    }
}
abstract class View extends Base { /* ... */ }
abstract class Model extends Base { /* ... */  }

class News extends Controller {
    public function index() {
        /* Displays the 5 most recent News articles and displays with Content Area */
        $this->load_model('NewsModel', 'index');
        $this->load_view('news', 'index');
        echo self::$var;
    }

    public function menu() {
        /* Displays the News Title of the 5 most recent News articles and displays within the Menu Area */
        $this->load_model('news/index');
        $this->load_view('news/index');
    }
}
class ChatBox extends Controller { /* ... */  }
/* Lots of different features extending the controller/view/model class depending upon request and layout */

class NewsModel extends Model {
    public function index() {
        echo self::$var;
        self::$Obj['Database']->query(/*SELECT 5 most recent news articles*/);
    }

    public function menu() { /* ... */  }
}


$Libraries = new Libraries;

$controller = 'News'; // Would be determined from Query String
$method = 'index'; // Would be determined from Query String

$Content = $Libraries->load_class('controller', $controller); //create the controller for the specific page

if (in_array($method, get_class_methods($Content)))
{
    call_user_func(array($Content, $method));
}
else
{
    die('Bad Request'. $method);
}

$Content::$var = 'Goodbye World';
echo $Libraries::$var . ' - ' . $Content::$var;
?>

/* Output */
0
1
2
3
Hello World!Hello World!Goodbye World - Goodbye World

1 Cevap


As an amateur user of PHP, i am learning PHP by reading the source code of MVC PHP Framework and articles on the web.

Bu hayır (ya da çok az) "Süper sınıfı" fikri, bunun yerine, PHP Autoload özelliğini kullanabilirsiniz uygulayan açık kaynak kodlu bir çerçeve olduğunu bana görünüyor:

http://www.php.net/autoload
http://www.php.net/spl_autoload_register

Ayrıca, ben makale ve kitaplarda öğrendiklerini, bunun "Süper Sınıf" kullanımı kötü bir uygulama olduğu söyleniyor.

Ben autoloading uygulayarak kod geliştirmek için deneyebilirsiniz düşünüyorum.

You may also take a look on Kohana at www.kohanaphp.com.
The Kohana 2 series is a PHP-5 only CodeIgniter rewrite plus improvement,
while the Kohana 3 series is a brand new framework with a different architecture.