Your SlideShare is downloading. ×
PHP 5 Magic Methods
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

PHP 5 Magic Methods

12,287
views

Published on

A brief overview of magic methods/functions in PHP 5 along with sample usage.

A brief overview of magic methods/functions in PHP 5 along with sample usage.

Published in: Technology

2 Comments
5 Likes
Statistics
Notes
No Downloads
Views
Total Views
12,287
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
258
Comments
2
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. PHP 5 Magic Functions
    Front Range PHP Users Group
    http://frontrangephp.org/
    February 10, 2010
  • 2. PHP 5 Magic Functions
    All functions start with __
    PHP reserves all function names starting with __
    Don’t define them unless you want the magic functionality
  • 3. Magic Methods in this Presentation
    __construct()
    __destruct()
    __toString()
    __get()
    __set()
    __isset()
    __unset()
    __call()
    __clone
    __set_state()
  • 4. Magic Methods briefly covered
    __callStatic()
    __sleep()
    __wakeup()
    __invoke()
    __autoload()
  • 5. New to PHP 5
    Magic functions (in general) allow you to define class functionality without needing to duplicate code
    I say in general since some of them don’t really seem to follow that definition and I didn’t find a definition that covers them all.
  • 6. __construct()
    If you’ve done any OOP in PHP5, you’ve probably run into this method.
    Used to initialize an object.
    Best practices say to make sure you don’t do work in the constructor.
    Just assign values
    … and remember Dependency Injection (coming up next)
  • 7. __construct()
    Constructor is setting values, but not doing work
  • 8. __construct()
    Doing work in constructors makes it harder to reuse the class.
  • 9. __construct()
    If you don’t provide a constructor method, and extend a class, the parent constructor will be called automatically.
    If you do provide a constructor, and want the parent constructor called, you must called parent::__construct()
  • 10. __construct()
    By making the constructor inaccessible, you can prevent external instantiation.
    For example, implementing the singleton pattern, we don’t want external instantiation since we cannot control how many objects are created.
  • 11. __destruct()
    __destruct() is called when
    all references to an object are removed
    object is explicitly destroyed
    shutdown sequence is initiated
  • 12. __destruct()
    Parent destructors must be called explicitly if destructor is provided
  • 13. __destruct()
    You could use this method to ensure an object logs itself.
  • 14. __destruct()
    The destructor is called even if a script exits due to a call to exit()
    However, if you call exit() in a destructor, the other destructors will be skipped.
    Throwing an exception in the destructor is a fatal error.
  • 15. __toString()
    Called whenever you try to use an object in a string context
  • 16. __toString()
  • 17. __toString()
    You can invoke via echo, print, *printf
    Cast to string
    $var = (string)$obj;
  • 18. __toString()
    __toString() cannot throw an exception – results in a fatal error
    If you call functions or methods in your __toString() that can throw an exception, make sure you handle it within the __toString() method
  • 19. __get()
    Called when code tries to access non-accessible properties
  • 20. __get()
    Non-accessible can mean either the property is not defined or that it is not public
    If it’s not defined, then __get() will be called from both inside and outside of the class context
  • 21. __get()
  • 22. __get()
  • 23. __get()
    Classes don’t even have to have properties
  • 24. __get()
    You could even use it to process values…
  • 25. __set()
    Called when code tries to set a property that is not accessible.
    Not accessible can mean not defined or not public
  • 26. __set()
  • 27. __set()
    If __set() is used to set a property that doesn’t exist, the new property will be public.
    If it is used on a property that is not public, the accessibility will not change
  • 28. __set()
    Use it to validate values as they are passed in
  • 29. __set()
    If you want only the values you defined to be used in a class, set that behavior in __set().
  • 30. __isset()
    Called when isset() is called on an inaccessible property
    If you’re using __set() and __get(), not defining __isset() can lead to some really weird errors.
  • 31. __isset()
  • 32. __isset()
    How can this be?
    You can retrieve the value, but it’s not set?
    Must define
    __isset()
  • 33. __unset()
    Called when code tries to unset a non-accessible value.
    Without __unset()
  • 34. __unset()
    With __unset()
  • 35. __call()
    Called when a method is called that is not accessible.
  • 36. __call()
    Use it to extend a class and make everything public…
  • 37. __call()
    Yes, I didn’t extend anything in that example, but the principle is the same
  • 38. __call()
    Virtual Getters and Setters
  • 39. __call()
    All sorts of other uses for __call()
  • 40. __clone()
    Used if custom clone() behavior is needed
    If clone() is called on an object that contains other objects, both the clone and the original contain the same objects.
    Define __clone() to define what happens when an object is cloned
  • 41. __clone()
    Default Clone behavior
    Using === to show they are the same
  • 42. __clone()
    Now with custom __clone()
  • 43. __clone()
    In the previous example we are comparing the objects
    Even if the number value is the same, there are still two different objects
  • 44. __set_state()
    Used to set the state of an object when var_export code is used.
  • 45. __set_state()
    var_export() creates runnable PHP code.
    So what happens when we run it?
  • 46. __set_state()
    So let’s define it
  • 47. __set_state()
    Why the differences?
    stdClass doesn’t have a __set_state()
    Since $val is protected, I need a setter.
    Plus it shows how to deal with non-public stuff
  • 48. Brief Look at other magic methods
    You’ve already seen 48 slides, and chances are it’s getting close to an hour…
    So here’s a quick overview of a few more of the magic methods
  • 49. __callStatic()
    New in PHP 5.3
    Very similar to __call()
    Intended for when a method is called in a static context (inaccessible method)
    SomeClass::protectedStaticMethod();
  • 50. __sleep()
    Called when an object is serialized with PHP’s serialize.
    Can be used to shutdown and remove resources (like database connections) which cannot be serialized
  • 51. __wakeup()
    Called when an object is unserialized.
    Can be used to re-establish connections and re-initialize resources
    ie, reconnect to the database
  • 52. __invoke()
    New in PHP 5.3
    Allows you to treat an object like a function
  • 53. __autoload()
    Everyone using PHP 5 should be using this, or at least some form of autoloading.
    Allows you to automatically load PHP files when they are needed.
    No more need for require_once or include_once in your scripts
  • 54. Q & A
    Any questions?