Object-Oriented Programming with PHP
Total Page:16
File Type:pdf, Size:1020Kb
Object-oriented Programming with PHP This chapter introduces the readers to the basic features of object-oriented programming with PHP and then provides an overview of the common design patterns. Later, we will go over how error handling and exception handling are performed in PHP. PHP has traditionally not been an object-oriented programming (OOP) language until PHP 5 when the language was revamped for a great deal to support the OOP features. PHP in programming PHP is a scripting language that is often used to build dynamic web applications. PHP inherits its programming style from C and Java. PHP comes with powerful libraries and strong community support, making it one of the favorite languages that developers use for building web applications. We will be utilizing the PHP libraries that were installed in Bonus chapter 1, Installation of PHP, MariaDB, and Apache to execute our scripts. Let us look at the three ways in which PHP scripts can be executed: • Via the PHP shell • Via the command line • Using a web server such as Apache The PHP shell is commonly used as a playground to test small scripts, and the shell can get tedious when working with bigger scripts. Executing files via command line is the second option where the PHP scripts will live inside the files. As we will be using object-oriented design to build our scripts, we will skip the first method and use the second and third methods to execute our scripts. Object-oriented Programming with PHP Object-oriented programming Object-oriented programming is a popular programming paradigm where concepts are grouped into reusable objects that carry their own attributes and behaviors. An attribute can be described as a variable that is in the object, which is used to hold data pertaining to that object, while a behavior describes what an object can do. Let us consider the example of a User object; a user will have a name, an age, and an address, and these will be the attributes for a user. As the User object stores the address, we could have a behavior to allow and facilitate address retrieval; the behaviors are referred to as class methods. An object is a complex data structure that can have one or more types of attributes and one or more types of behaviors. The attributes and behaviors are defined in a class, and an object is an instance of a class. Therefore, the instances carry the same attributes and behaviors of that class. Though there could be multiple objects of the same class, the data stored in each object would be stored in different memory locations. OOP is not a new concept and has been around for a very long period. OOP allows us to group our code based on behaviors and attributes and also allows us to organize our code for better reusability. Basic object-oriented features such as objects and classes were introduced into PHP 3 in 1998. In 2000, PHP 4 was released with a better support for object-oriented features but the implementation of objects was still an issue, as the object referencing was handled similar to value types. So a whole object would be copied when an object had to be passed in as a parameter to a function. As the object had to be copied, recreated, and stored several times, this led to poor scalability for big applications, extra usage of memory, and unnecessary overhead on the resources. PHP 5, which was shipped in 2004, arrived with a far superior object model that was better at handling objects, thereby increasing the performance and scalability of the web applications. Now that we have a basic idea about OOP, let us dive into understanding classes and objects. Sublime text is used as the text editor for this series. It is recommended to use a text editor or IDE of your choice. A few popular IDEs are Eclipse for PHP and the NetBeans IDE for PHP development. Classes and objects In our first example, let us define a class. For creating a class, we would at least need one piece of information, the unique name for the class. In PHP, a class definition begins with the keyword class, and the keyword is followed by the unique name of the class. This is followed by a pair of curly braces and any class attributes and/or methods are enclosed into these curly braces. [ 2 ] Bonus chapter 2 There are two rules for naming a class in PHP mentioned as follows: • It should begin with a letter or an underscore • It can only contain letters, numbers, or underscores It is a good practice to have the name of the class as part of the filename (for example, class.Students.php) or the actual filename itself (for example, Students.php). It is also common to use camel case, which is a common practice for naming the classes, class attributes, and class methods where multiple words are compounded into one, and the first letter of each word is written in upper case. Consider the following code snippet as an example showing a Students class: <?php class Students { public function __construct() /** * Code to be executed *upon object instantiation */ } } ?> In this example, we are creating a Students class with a constructor using the __construct keyword. A constructor is the first function that is triggered upon the object instantiation. A constructor is commonly used for any bootstrapping purposes such as importing configurations and/or performing setup operations. The __construct() keyword is reserved by the PHP engine to identify the constructors in a class. Therefore, a constructor cannot be declared outside a class. The PHP engine treats a constructor like any other function; so, if a constructor is declared more than once, we will receive an error. Now that we understand how to create a class, let us continue with our Students class and add a few class attributes and class methods. After adding the attributes and methods, let us instantiate an object to access the attributes and methods. To instantiate an object, we will use the new keyword. We would need at least two pieces of information for the object instantiation; the first piece is the name of the object and the second is the name of class for which an object is being instantiated. Consider the following code example: <?php class Students { [ 3 ] Object-oriented Programming with PHP public $first_name; public $last_name; public $address; public function __construct($first_name , $last_name, $address){ $this->first_name = $first_name; $this->last_name = $last_name; $this->address = $address; } public function greeting(){ return "Hello ".$this->first_name."\n"; } public function getAddress(){ return $this->address."\n"; } } $student = new Students("John", "Doe", "3225 Woodland Park St"); echo $student->greeting(); echo $student->getAddress(); ?> In this example, we have added three class attributes or properties to store the first name, the last name, and the address of the student. We are initializing our properties via the constructor and the value for our properties will be passed in after the object instantiation. We have also added two class methods that would print out a greeting and return the address of the student. We are using the $this keyword to access our properties, and it can also be used to access the class methods as it is a reference to the Students object. We are using the -> notation to access the properties or the methods of a class. After defining the class, we are instantiating an object of the Students class, and are calling the $student object. During the instantiation, we are passing in the arguments that are expected by our constructor, and these values are assigned to the properties. After the object instantiation, we are invoking the class methods using our $student object. [ 4 ] Bonus chapter 2 The output for the previous code will be as follows: Hello John 3225 Woodland Park St Static properties and methods It is not always necessary to instantiate an object to access the properties or methods of a class. A class can also have static methods and properties that are bound to the class, rather than the object. To access a static method or a static property, we will use the scope resolution operator (::). To create a static property or static method, we will append the static keyword ahead of the variable. A static property or method will be commonly used to instantiate a database connection or a connection to a remote service that can add significant overhead. For a method to be accessible, the object of the class has to be created, during which a virtual method and member table are created for that class. While accessing static methods, we can avoid this overhead of creating a virtual method and member table for the class. Static methods are commonly used for high-performance systems. We have successfully built our first class, instantiated the class, accessed the class methods, and discussed static methods and properties. During this process, we have already come across one of the four principles of OOP, which is abstraction. Abstraction is a concept about exposing the behavior and properties and hiding the particular code that performs that behavior. In our previous example, we have abstracted all the functionalities that a student object can have into the Students class, and have accessed those functionalities by creating an object of that class. The other three principles that we would look at are encapsulation, inheritance, and polymorphism. Encapsulation With abstraction, we have seen how to hide the underlying implementation that provides properties and methods. With encapsulation, let us see how we can expose a specific set of methods and properties, while hiding or restricting access to another set of properties and/or methods based on who is accessing this functionality.