writing friendly libraries for codeigniter

64
Writing Friendly Libraries @seejohnrun

Upload: codeigniter-conference

Post on 05-Jul-2015

1.765 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Writing Friendly libraries for CodeIgniter

Writing Friendly Libraries@seejohnrun

Page 2: Writing Friendly libraries for CodeIgniter

$CI =& get_instance();

Page 3: Writing Friendly libraries for CodeIgniter
Page 4: Writing Friendly libraries for CodeIgniter

reactor

Page 5: Writing Friendly libraries for CodeIgniter

<?php<?php$this$this->->loadload->->modelmodel(('user''user'););// get the user and their fancy comments// get the user and their fancy comments$user$user == $this$this->->useruser->->get_by_nameget_by_name((''johnjohn''););$user$user->->commentscomments();();

http://seejohncode.com/2011/02/12/codeigniter-model-instances

Page 6: Writing Friendly libraries for CodeIgniter
Page 7: Writing Friendly libraries for CodeIgniter

getsparks.org

Page 8: Writing Friendly libraries for CodeIgniter

getsparks.org76 sparks

> 16,000 installs

Page 9: Writing Friendly libraries for CodeIgniter

getsparks.orgkatzgrau/getsparks.org

seejohnrun/sparks

Page 10: Writing Friendly libraries for CodeIgniter

getsparks.orggreat for internal distribution

as well

Page 11: Writing Friendly libraries for CodeIgniter

libraries!!!

Page 12: Writing Friendly libraries for CodeIgniter

railshuge library community centering on rubygems

Page 13: Writing Friendly libraries for CodeIgniter

rails40 direct100 total

Page 14: Writing Friendly libraries for CodeIgniter

is it bad?

Page 15: Writing Friendly libraries for CodeIgniter

nah...

Page 16: Writing Friendly libraries for CodeIgniter

let’s share!

Page 17: Writing Friendly libraries for CodeIgniter

the plan•things a good library needs•some strategies for writing

more useful libraries•some CI-specific tips

Page 18: Writing Friendly libraries for CodeIgniter
Page 19: Writing Friendly libraries for CodeIgniter

tested

Page 20: Writing Friendly libraries for CodeIgniter

testable

Page 21: Writing Friendly libraries for CodeIgniter

reduce coupling

Page 22: Writing Friendly libraries for CodeIgniter

<?php<?php// bootstrap.php// bootstrap.phprequire_oncerequire_once(('dependency.php''dependency.php'););DependencyDependency::::config();config();

// utility.php// utility.phpDependencyDependency::::broken();broken();

// dependency.php// dependency.phpclassclass DependencyDependency { { static static functionfunction brokenbroken() {() { // :(// :( }} static static functionfunction configconfig() { }() { }}}

Page 23: Writing Friendly libraries for CodeIgniter

nice_httphttp library

easily mock web requests

Page 24: Writing Friendly libraries for CodeIgniter

<?php<?phpNiceHTTPNiceHTTP::::registerregister((functionfunction(($request$request) {) { ifif ( ($request$request->->isGetisGet() () &&&& $request$request->->hasPathhasPath(('/''/')) {)) { returnreturn NiceHTTP\BasicResponse( NiceHTTP\BasicResponse(200200, , 'hi''hi');); }}});});

NiceHTTPNiceHTTP::::disallowExternalConnectionsdisallowExternalConnections();();

Page 25: Writing Friendly libraries for CodeIgniter
Page 26: Writing Friendly libraries for CodeIgniter

versioned

Page 27: Writing Friendly libraries for CodeIgniter

0.6.3

Page 28: Writing Friendly libraries for CodeIgniter

0.6.3patch version

backwards-compatible bug fixes

Page 29: Writing Friendly libraries for CodeIgniter

0.6.3minor version

backwards-compatible public functionality

Page 30: Writing Friendly libraries for CodeIgniter

0.6.3major version

backwards-incompatible public functionality

Page 31: Writing Friendly libraries for CodeIgniter

1.0.0•should mark a milestone

•is a scary place

Page 32: Writing Friendly libraries for CodeIgniter
Page 33: Writing Friendly libraries for CodeIgniter

documented

Page 34: Writing Friendly libraries for CodeIgniter

externallyPHPDoc

Page 35: Writing Friendly libraries for CodeIgniter

externallyvisibility

Page 36: Writing Friendly libraries for CodeIgniter

internallyPHPDoc

Page 37: Writing Friendly libraries for CodeIgniter

internallycomments

Page 38: Writing Friendly libraries for CodeIgniter

<?php<?php// get the name// get the name$name$name == 'john''john';;// reverse the name// reverse the name$rname$rname == strrevstrrev(($name$name););// capitalize the letters of the name// capitalize the letters of the name$name$name == strtoupperstrtoupper(($name$name););// and the rname// and the rname$rname$rname == strtoupperstrtoupper(($rname$rname););// and then compute a levenshtein distance// and then compute a levenshtein distancelevenshteinlevenshtein(($name$name, , $rname$rname););

Page 39: Writing Friendly libraries for CodeIgniter
Page 40: Writing Friendly libraries for CodeIgniter

adaptable

Page 41: Writing Friendly libraries for CodeIgniter

OO

Page 42: Writing Friendly libraries for CodeIgniter

<?php<?php$cache$cache->->setset(('name''name', , 'john''john'););$cache$cache->->getget(('name''name'););

Page 43: Writing Friendly libraries for CodeIgniter
Page 44: Writing Friendly libraries for CodeIgniter

namespaced

Page 45: Writing Friendly libraries for CodeIgniter
Page 46: Writing Friendly libraries for CodeIgniter

tip: use your library before you

write it

Page 47: Writing Friendly libraries for CodeIgniter

tip: have someone else read your fake

code

Page 48: Writing Friendly libraries for CodeIgniter

tip: don’t be lazy. skip out on the

shady code

Page 49: Writing Friendly libraries for CodeIgniter

tip: confusing code doesn’t

make you look cool

Page 50: Writing Friendly libraries for CodeIgniter

tip: pull requests are free code

lessons

Page 51: Writing Friendly libraries for CodeIgniter
Page 52: Writing Friendly libraries for CodeIgniter
Page 53: Writing Friendly libraries for CodeIgniter

no more long library files

Page 54: Writing Friendly libraries for CodeIgniter

use config<?php<?php$this$this->->loadload->->librarylibrary(('fun''fun', , arrayarray(('some''some' =>=> 'option''option'));));

<?php<?phpclassclass FunFun { { publicpublic functionfunction __construct__construct(($params$params == arrayarray()) {()) { $this$this->->optionoption == array_key_existsarray_key_exists(($params$params, , 'some''some') ) ?? $params$params[['some''some'] ] :: 'default''default';; }}}}

Page 55: Writing Friendly libraries for CodeIgniter

use config<?php<?php$this$this->->loadload->->librarylibrary(('fun''fun', , arrayarray(('some''some' =>=> 'option''option'));));

<?php<?phpclassclass FunFun { { publicpublic functionfunction __construct__construct(($params$params == arrayarray()) {()) { $this$this->->optionoption == issetisset(($params[$params['some''some']]) ) ?? $params$params[['some''some'] ] :: 'default''default';; }}}}

Page 56: Writing Friendly libraries for CodeIgniter

use config<?php<?php$CI$CI = &get_instance(); = &get_instance();$CI$CI->->configconfig->->itemitem(('fun''fun'););

Page 57: Writing Friendly libraries for CodeIgniter

use lang

<?php<?php$CI$CI = &get_instance(); = &get_instance();$CI$CI->->langlang->->lineline(('key''key'););

Page 58: Writing Friendly libraries for CodeIgniter

don’t artificially restrict yourself

config/config/helpers/helpers/language/language/libraries/libraries/models/models/views!!!views!!!

Page 59: Writing Friendly libraries for CodeIgniter

tip: stop coding libraries for php4

Page 60: Writing Friendly libraries for CodeIgniter
Page 61: Writing Friendly libraries for CodeIgniter
Page 62: Writing Friendly libraries for CodeIgniter

tip: don’t be a downer

Page 63: Writing Friendly libraries for CodeIgniter

tip: go make and share something

amazing

Page 64: Writing Friendly libraries for CodeIgniter

@seejohnrun@getsparks@getsparks