23
On the Origin of Lithium The framework for people who hate frameworks

On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

On the Origin of LithiumThe framework for people who hate frameworks

Page 2: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?
Page 3: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

?

Page 4: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?
Page 5: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

I booked this talk with Hans

And now here we are

Page 6: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

In the beginning...

PHP / FI

1995

<!--sql database select * from table where user='$username'-->

<!--ifless $numentries 1--> Sorry, that record does not exist<p> <!--endif exit-->

Welcome <!--$user-->!<p> You have <!--$index:0--> credits left in your account.<p>

PHP 3

Page 7: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

In the beginning...

PHP / FIPHP 3

1998

<? $name = "bob"; $db = "db"; $result = msql($db,"select * from table where firstname='$name'"); $num = msql_numrows($result); echo "$num records found!<p>"; $i=0; while($i<$num);    echo msql_result($result,$i,"fullname");    echo "<br>";    echo msql_result($result,$i,"address");    echo "<br>";    $i++; endwhile;>

PEAR

Page 8: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

In the beginning...

PHP / FIPHP 3

2000

require_once 'MDB2.php';require_once 'DB/Table.php';require_once 'Guestboook_Table.php';

$dsn = "phptype://username:password@localhost/database";$conn = MDB2::connect($dsn);

$table = 'GuestBook';$create = 'safe';$GuestBook =& new GuestBook_Table($conn, $table, $create);

if ($GuestBook->error) { echo "Failure! Try again."; print_r($GuestBook->error);}

PEAR PHP 4

Page 9: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

In the beginning...

PHP / FIPHP 3

2000

class A { function foo() { if (isset($this)) { echo '$this is defined (' . get_class($this). ")\n"; } else { echo "\$this is not defined.\n"; } }}class B { function bar() { A::foo(); }}

PEAR PHP 4 PHP 5

Page 10: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

In the beginning...

PHP / FIPHP 3

2004

class A {

protected $_foo = 0;

public static function foo() { self::$_foo++; } }

PEARPHP 4 PHP 5 CakePHP

Page 11: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

In the beginning...

PHP / FIPHP 3

2005

PEARPHP 4PHP 5 CakePHP

class PostsController extends AppController {

public function index() { $posts = $this->Post->find(“all”); $this->set(compact(‘posts’)); } }

Symfony

Page 12: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

In the beginning...

PHP / FIPHP 3

2005

PEARPHP 4PHP 5CakePHP

class mymoduleActions extends sfActions{ public function executeIndex() { // Retrieving request parameters $password = $this->getRequestParameter('password');  // Retrieving controller information $moduleName = $this->getModuleName(); $actionName = $this->getActionName();  // Retrieving framework core objects $request = $this->getRequest(); $userSession = $this->getUser(); $response = $this->getResponse();

Symfony CodeIgniter

Page 13: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

In the beginning...

PHP / FIPHP 3

2006

PEARPHP 4PHP 5CakePHP

class Blogmodel extends Model {

    var $title   = '';    var $content = '';    var $date    = '';

    function Blogmodel()    {        // Call the Model constructor        parent::Model();    }        function get_last_ten_entries()

Symfony CodeIgniter Zend

Page 14: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

In the beginning...

PHP / FIPHP 3

2007

PEARPHP 4PHP 5CakePHP

< ?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{ protected function _initDoctype() { $this->bootstrap('view'); $view = $this->getResource('view'); $view->doctype('XHTML1_STRICT'); }  protected function _initAutoload() { $autoloader = new Zend_Application_Module_Autoloader(array(

SymfonyCodeIgniter Zend

Page 15: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

What have we learned?

Uniformity: +

Tight coupling: -

Lack of extensibility: -

Page 16: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

What have we learned?

People dislike complexity for its own sake

Things are reactionary (high level)

A lot of things are superficial (high level)

Page 17: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

Ch-Ch-Ch-Changes

Late Static Binding

Namespaces

Closures

Page 18: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

Late Static BindingProper subclassing of static classes... finally

Warm, fuzzy feelings of architectural purity

Handling state (vs. statelessness)

Page 19: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

Namespaces

Formal, non-hacky way to organize classes

No_More_Class_Names_That_Go On_For_Days

New PEAR-inspired naming standard

Page 20: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?
Page 21: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

Standards AdoptersAgavi

Symfony

Doctrine

PEAR

Solar

Zend Framework

...

Page 22: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?
Page 23: On the Origin of Lithiumnyphp.org/resources/Lithium-CakePHP-Origins.pdf · On the Origin of Lithium The framework for people who hate frameworks?

Closures

function Y($F) {    return current(array(function($f) { return $f($f); }))->__invoke(function($f) use ($F) {         return $F(function($x) use ($f) {             return $f($f)->__invoke($x);         });     }); }