JustinK101 Posted June 16, 2007 Share Posted June 16, 2007 So I am sitting and trying to figure out, how making classes in php, and using OOP in php would be useful. I do a lot of PHP + MySQL. Let me give an example of the kind of things I do, which are common, and perhaps somebody could provide some OOP examples: Lets assume we have the following MySQL table schema. Customers id first_name last_name company_name Orders id associated_customer_id number_of_products price_per_product If I want to pull all customers I would simply do something like: $sql = "SELECT * FROM customers"; $result = mysql_query($sql) or die(mysql_error()); while($row = mysql_fetch_object($result)) { echo 'First Name: ' . $row->first_name; echo 'Last Name: ' . $row->last_name; //And So Forth } Now it would be cool if I could simply create a new 'customers' class object and then call a class member or simply GET and SET class member variables. I am just not sure how to go about doing it. Thanks for the help. Link to comment https://forums.phpfreaks.com/topic/55798-how-to-use-oop-in-php-for-real-life-examples/ Share on other sites More sharing options...
JustinK101 Posted June 16, 2007 Author Share Posted June 16, 2007 Ok, so here is what I came up with. class Customer { var $id; var $first_name; var $last_name; var $company_name; //Constructor - Creates a customer with all properites set to null. function Customer() { $this->id = NULL; $this->first_name = NULL; $this->last_name = NULL; $this->company_name = NULL; } //Overloaded Constructor - Creates a customer with all properties set from the customer id. function Customer($id) { $sql = "SELECT * FROM customers WHERE customer_id = " . $id . " LIMIT 1"; $result = mysql_query($sql) or die(mysql_error()); while($row = mysql_fetch_assoc($result)) { $this->id = $id; $this->first_name = $row['first_name']; $this->last_name = $row['last_name']; $this->company_name = $row['company_name']; } } } //Create and instanciate of the customer object $myCustomer = new Customer(); //Create and instanciate of the customer object $myCustomer2 = new Customer(121); I am not understanding the benfit of this? It took like 5 times as long, and a lot more typing. Pehaps somebody could explain further. Link to comment https://forums.phpfreaks.com/topic/55798-how-to-use-oop-in-php-for-real-life-examples/#findComment-275622 Share on other sites More sharing options...
trq Posted June 16, 2007 Share Posted June 16, 2007 I am not understanding the benfit of this? It took like 5 times as long, and a lot more typing. Yeah, but now, anywhere you need a customers details all you need call is.... <?php include "customer.class.php"; $myCustomer2 = new Customer(121); ?> Link to comment https://forums.phpfreaks.com/topic/55798-how-to-use-oop-in-php-for-real-life-examples/#findComment-275624 Share on other sites More sharing options...
JustinK101 Posted June 16, 2007 Author Share Posted June 16, 2007 Ok, so I guess that is nice, but whats the trick to creating a new customer, or updating a customer? Is there such things at GET and SETS like in C#? Also, if I made a class for Order, does Order extend Customer, or inherit the Customer class? I guess I don't quite fully understand how I can make a customer class which allows, retrieving, creating, updating, and deleting of data via a MySQL database. Also in my current class a Customer is only one, how would I pull all customers? Like I want a list of all customers? Link to comment https://forums.phpfreaks.com/topic/55798-how-to-use-oop-in-php-for-real-life-examples/#findComment-275626 Share on other sites More sharing options...
emehrkay Posted June 16, 2007 Share Posted June 16, 2007 here is how i designed my personal db class i have a parent db class that handles all of the db interaction, then i have classes for each table in the db with static methods that contain prepaired statements to run queries class db{ //connects to the db, handles queries etc, also a singleton } class user extends db{ public static function insert($name, $pass){ //insert query $this->runquery($query); //runquery() is in db } } and i use it like require 'user.sql.php'; $add_user = user::insert($name, $pass); thats just one of a billion ways to handle it, and it works well for me Link to comment https://forums.phpfreaks.com/topic/55798-how-to-use-oop-in-php-for-real-life-examples/#findComment-275638 Share on other sites More sharing options...
JustinK101 Posted June 16, 2007 Author Share Posted June 16, 2007 here is how i designed my personal db class i have a parent db class that handles all of the db interaction, then i have classes for each table in the db with static methods that contain prepaired statements to run queries class db{ //connects to the db, handles queries etc, also a singleton } class user extends db{ public static function insert($name, $pass){ //insert query $this->runquery($query); //runquery() is in db } } and i use it like require 'user.sql.php'; $add_user = user::insert($name, $pass); thats just one of a billion ways to handle it, and it works well for me Could you provide more of the code? Not sure I follow that. One thing I want to do, is give me flexability to add and remove columns from a table without making a lot of changes all over the place. Link to comment https://forums.phpfreaks.com/topic/55798-how-to-use-oop-in-php-for-real-life-examples/#findComment-275641 Share on other sites More sharing options...
emehrkay Posted June 16, 2007 Share Posted June 16, 2007 Im not sure that i understand what you want - you want to modify tables without messing up queries that were already written that may contain those columns? Link to comment https://forums.phpfreaks.com/topic/55798-how-to-use-oop-in-php-for-real-life-examples/#findComment-275648 Share on other sites More sharing options...
redbullmarky Posted June 16, 2007 Share Posted June 16, 2007 you could do worse than reading up a bit more on Active Record: http://en.wikipedia.org/wiki/Active_record . I actually use an implementation based on CakePHP (which in turn is based on Rails), so I can just do stuff like: <?php // simple example to read user with 'id' of 3, change its username and change it back. // pointless exercise but just an example of what can be done.... $user = new User(); // user class extends model class $user->id = 3; $user->read(); // SELECT query: SELECT * FROM users WHERE id = 3 $oldusername = $user->username; $user->username = 'hello'; $id = $user->save(); // UPDATE or INSERT query depending if 'id' field is set in my object // UPDATE users SET username = '$oldusername' WHERE id = 3 $user->saveField('username', $oldusername); ?> the point really, as thorpe suggested, is that I dont need to keep rewriting common queries, or even escaping data for queries. my methods automatically run inputted data through mysql_real_escape_string and built the queries for me. Consider if I create a registration page. My User model can be used again and again on many sites, even if my table structure alters, with minimal changes rather than rewriting entire queries. I also dont need to check whether to use INSERT or UPDATE when saving data. I can also change the DB to something like MSSQL, Oracle, etc without breaking my main code. Hell, I can even use flat file DB if I want, yet my code remains the same. PHP does have __get , __set and __call magic methods should you need them, which you can see at work in my example where i use $user->username and $user->id . See here Hope that helps! Cheers Link to comment https://forums.phpfreaks.com/topic/55798-how-to-use-oop-in-php-for-real-life-examples/#findComment-275680 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.