Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Discover the world of object-oriented programming

Discover the world of object-oriented programming

These are the slides from a workshop given at WordCamp Montréal 2015.

Object-oriented programming is a tricky subject in the WordPress community. Of course, you've heard about it. Everyone says it's awesome!

Meanwhile, you're ready for that next step. You've built a few plugins and maybe a theme or two. You're not new to WordPress anymore.

Yet each time you look into it, it makes no sense! You end up telling yourself object-oriented programming isn’t useful. That it's not worth the trouble to learn.

The goal of this workshop is to help you with that. It’ll walk you through a basic framework to get you started. You’ll leave with a better understanding of what object-oriented programming is. You'll be able to progress at last.

An email course based on this workshop is available at: https://carlalexander.ca/discover-object-oriented-programming/

Carl Alexander

June 29, 2015
Tweet

More Decks by Carl Alexander

Other Decks in Programming

Transcript

  1. function  get_authors_registered_after($date,  $number  =  5)   {      

       $results  =  array();          $authors  =  get_users('who=authors');              foreach  ($authors  as  $author)  {                  if  ($author-­‐>user_registered  >  $date)  {                          $results[]  =  $author;                  }                      if  (count($results)  >=  $number)  {                          break;                  }          }              return  $results;   }
  2. function  get_authors_registered_after($date,  $number  =  5)   {      

       $results  =  array();          $authors  =  get_users('who=authors');              foreach  ($authors  as  $author)  {                  if  ($author-­‐>user_registered  >  $date)  {                          $results[]  =  $author;                  }                      if  (count($results)  >=  $number)  {                          break;                  }          }              return  $results;   }
  3. function  get_authors_registered_after($date,  $number  =  5)   {      

       $results  =  array();          $authors  =  get_users('who=authors');              foreach  ($authors  as  $author)  {                  if  ($author-­‐>user_registered  >  $date)  {                          $results[]  =  $author;                  }                      if  (count($results)  >=  $number)  {                          break;                  }          }              return  $results;   }
  4. function  get_authors_registered_after($date,  $number  =  5)   {      

       $results  =  array();          $authors  =  get_users('who=authors');              foreach  ($authors  as  $author)  {                  if  ($author-­‐>user_registered  >  $date)  {                          $results[]  =  $author;                  }                      if  (count($results)  >=  $number)  {                          break;                  }          }              return  $results;   }
  5. function  get_authors_registered_after($date,  $number  =  5)   {      

       $results  =  array();          $authors  =  get_users('who=authors');              foreach  ($authors  as  $author)  {                  if  ($author-­‐>user_registered  >  $date)  {                          $results[]  =  $author;                  }                      if  (count($results)  >=  $number)  {                          break;                  }          }              return  $results;   }
  6. function  get_authors_registered_after($date,  $number  =  5)   {      

       $results  =  array();          $authors  =  get_users('who=authors');              foreach  ($authors  as  $author)  {                  if  ($author-­‐>user_registered  >  $date)  {                          $results[]  =  $author;                  }                      if  (count($results)  >=  $number)  {                          break;                  }          }              return  $results;   }
  7. class  Authors     {          public

     function  get_registered_after($date,  $number  =  5)          {                  $results  =  array();                  $authors  =  get_users('who=authors');                      foreach  ($query-­‐>results  as  $author)  {                          if  ($author-­‐>user_registered  >  $date)  {                                  $results[]  =  $author;                          }                              if  (count($results)  >=  $number)  {                                  break;                          }                  }                      return  $results;          }   }
  8. Sketch your problem Using the problem from exercise #1: ๏

    Sketch as many classes as possible ๏ Can be as simple as just naming the class ๏ Break things down as much as possible ๏ Done quickly? Add properties! (~15 min.)
  9. class  MyPluginOptions   {          var  $options

     =  array();          function  get($name,  $default  =  null)  {                  if  (!$this-­‐>has($name))  {                          return  $default;                  }                  return  $this-­‐>options[$name];          }          function  has($name)  {                  return  isset($this-­‐>options[$name]);          }          function  set($name,  $value)  {                  $this-­‐>options[$name]  =  $value;          }   }
  10. class  MyPluginOptions   {          var  $options

     =  array();          function  get($name,  $default  =  null)  {                  if  (!$this-­‐>has($name))  {                          return  $default;                  }                  return  $this-­‐>options[$name];          }          function  has($name)  {                  return  isset($this-­‐>options[$name]);          }          function  set($name,  $value)  {                  $this-­‐>options[$name]  =  $value;          }   }
  11. class  MyPluginOptions   {          var  $options

     =  array();          function  get($name,  $default  =  null)  {                  if  (!$this-­‐>has($name))  {                          return  $default;                  }                  return  $this-­‐>options[$name];          }          function  has($name)  {                  return  isset($this-­‐>options[$name]);          }          function  set($name,  $value)  {                  $this-­‐>options[$name]  =  $value;          }   }
  12. class  MyPluginOptions   {          private  $options

     =  array();          public  function  get($name,  $default  =  null)  {                  if  (!$this-­‐>has($name))  {                          return  $default;                  }                  return  $this-­‐>options[$name];          }          public  function  has($name)  {                  return  isset($this-­‐>options[$name]);          }          public  function  set($name,  $value)  {                  $this-­‐>options[$name]  =  $value;          }   }
  13. class  MyPluginOptions   {          private  $options

     =  array();          public  function  get($name,  $default  =  null)  {                  if  (!$this-­‐>has($name))  {                          return  $default;                  }                  return  $this-­‐>options[$name];          }          public  function  has($name)  {                  return  isset($this-­‐>options[$name]);          }          public  function  set($name,  $value)  {                  $this-­‐>options[$name]  =  $value;          }   }
  14. Code your classes Using your sketches from exercise #2: ๏

    Create classes with properties and methods ๏ Control their access (public or private) ๏ Having an issue? Take note of it and move on ๏ Too easy? Try connecting your classes together (~20 min.)
  15. Find a problem Break it down into classes Work on

    the problem Review the bad (and the good)