Objektų magija su CTLF

Haris Poteris

Emilis Dambauskas

2005-11-26

Nebežinau kuo programuoti:

PHP yra prasta programavimo kalba

Python ir Ruby geriau

Bet Python sunkiai auga [#8, 2.767% / -2.43%], o Ruby dar labai mažas [#21, 0.434%].
Palyginimui: PHP [#4, 10.780% / +3.19%]
žr.: www.tiobe.com

C/C++/Java – žemo lygio programavimo kalbos

Perl vistiek “neveža”

Ką blogo išmokome iš PHP?

>3000 funkcijų užkraunamos kiekvieną kartą...

nėra namespaces (bus PHP6?)

HTML + PHP maišymas

Sukurkime bazinių objektų rinkinį ir užkraukime kaskart

Visi baziniai objektai global

Kodą skirtą puslapiams kepti naudojame aplikacijoms kurti

Koks turėtų būti geras PHP framework / CMS?

Objektinis

Paprastas

Lengvas (greitas)

Prisitaikantis

Moduliarus

Skirtas aplikacijoms, o ne puslapiams

Kaip to pasiekti?

Pradėkime nuo nulio

Išmeskime viską kas nebūtina

Kurkime sistemingai

Panaudokime gerą patirtį

Kas (ne)būtina framework'e?

Šablonų sistema

DB objektas

Tik jam skirtų klasių rinkinys

Vienoda URL struktūra

Moduliarumas (objektai moduliuose)

Lengvas objektų pasiekimo būdas

Logiška direktorijų (ir failų) struktūra

Paprastas konfigūravimas

Direktorijų struktūra:

files/ – images, css, JavaScript, etc.

system/

engine/ – variklis

lib/ – trečio pasaulio šalių bibliotekos

modules/ – moduliai ir objektai

config.inc.php – konfigūracijos failas

uploads/ – `chmod 777 uploads`

index.php – dažniausiai viskas eina per jį

Kas yra modulis?

Savarankiškas aplikacijos gabalas

modules/

MyNews/

tpl/

MyNews-listNews.tpl

MyNews-showNews.tpl
...

MyNews.class.php

MyNewsAdmin.class.php

Kas yra objektas?

Daiktas pasiekiamas per
$myObject = &loadObject(“MyNews.MyNews”);

Sukuriamas iš:
modules/MyNews/MyNews.class.php
$config[“MyNews”][...];
$config[“MyNews.MyNews”][...];

Turi tam tikrus metodus:
$myNews->listNews();

Hello world

class MyNews

{

function listNews()

{

$db = &loadObject('DB');

$sql = “SELECT * FROM news”;

$news = $db->GetAll($sql); // paima duomenis

$tpl = &loadObject('MyTpl');

$tpl->assign(“news”, $news); // atiduoda šablonui

return $tpl->process(“tpl/MyNews-listNews.tpl”); // out HTML

}

}

Kaip tai veikia?

/index.php?object=MyNews&action=listNews

engine/start.php: require_once(“ObjLoading.php”);

engine/start.php: $mapper = loadObject(“Mapper”);

$mapper->mapRequest();

mapRequest(): $myNews = loadObject(“MyNews”);

mapRequest(): return $myNews->listNews();

Tinklas objektų

Nebūtinai object.class.php!

Objektas su daug vardų:

modules/MyNews/MyNews.class.php

modules/DB/DB_loader.php
modules/ADOdb_loader.php
lib/ADOdb/adodb.inc.php

Rezervuoti objektų (modulių) vardai:

Mapper, Site, DB, Session, Security

Rezervuotas objektas turi tik metodų rinkinį (interface)!

Kas burtininko skrybėlėje?

CTLF: Cheap Tricks Library Framework

variklis: 9 funkcijos (esminė: loadObject())

Niekas neužkraunama kol nereikia, veikia greitai

Visi objektai pasiekiami per loadObject(“mod.obj”)

Implementacijos pagrindiniams objektams, bet:

Galima naudoti mano, savo ar draugo klases ir funkcijas.

Objektai + interfeisai vietoj klasių (daugiau magijos)

Patogus būdas greitai pridėti puslapių

Ačiū

ctlf.sourceforge.net

2005-11-25T21:00:02