The Origin of Lithium

12,391 views
12,130 views

Published on

This talk is an overview of the history of the PHP language and major framework projects that have emerged in the last 5 years. It examines what we've learned in the development of these frameworks, how that education has been brought to bear in Lithium. Most of this talk ended up being me demoing and answering questions, so there's not a lot of content in the slides, sorry.

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,391
On SlideShare
0
From Embeds
0
Number of Embeds
115
Actions
Shares
0
Downloads
56
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

The Origin of Lithium

  1. On the Origin of Lithium The framework for people who hate frameworks
  2. ?
  3. I booked this talk with Hans And now here we are
  4. In the beginning... <!--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 / FI 1995
  5. In the beginning... <?  $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; > PHP 3 1998
  6. In the beginning... 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 2000
  7. In the beginning... 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(); } } PHP 4 2000
  8. In the beginning... class A { protected $_foo = 0; public static function foo() { self::$_foo++; } } PHP 5 2004
  9. In the beginning... class PostsController extends AppController { public function index() { $posts = $this->Post->find(“all”); $this->set(compact(‘posts’)); } } CakePHP 2005
  10. In the beginning... 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 2005
  11. In the beginning... class Blogmodel extends Model {     var $title   = '';     var $content = '';     var $date    = '';     function Blogmodel()     {         // Call the Model constructor         parent::Model();     }          function get_last_ten_entries() CodeIgniter 2006
  12. In the beginning... < ?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( Zend 2007
  13. What have we learned? Uniformity: + Tight coupling: - Lack of extensibility: -
  14. What have we learned? People dislike complexity for its own sake Things are reactionary (high level) A lot of things are superficial (high level)
  15. Ch-Ch-Ch-Changes Late Static Binding Namespaces Closures
  16. Late Static Binding Proper subclassing of static classes... finally Warm, fuzzy feelings of architectural purity Handling state (vs. statelessness)
  17. Namespaces Formal, non-hacky way to organize classes No_More_Class_Names_That_Go On_For_Days New PEAR-inspired naming standard
  18. Standards Adopters Agavi Symfony Doctrine PEAR Solar Zend Framework ...
  19. 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);         });     }); }

×