StaticMethods andProperties
We can not only access methods and properties throughobjects, but also through classes. Such methods and properties are "static" (static) and must be declared with the static keyword.
class StaticExample{ static public $aNum=0; static public function sayHello() { self::$aNum++; print "hello (".self::$aNum.")/n"; } } print StaticExample::$aNum;StaticExample::sayHello();
Static methods arefunctionswith class as scope. Static methods cannot access normal properties in this class because those properties belong to an object, but static properties can be accessed. If you modify a static property, all instances of the class can access the new value. When accessing static elements, use :: to connect class names and attributes or class names and methods. To access a static method or property from the current class, you can use the self keyword. self points to the current class, just like the pseudovariable$this points to the current object. By definition, we cannot call static methods in objects, so static methods and properties are also called class variables and properties, so pseudo variables cannot be used in static methods.
The following constructs a static method of the ShopProduct class to automatically instantiate the ShopProduct object. Usesqliteto define the table products as follows:
CREATE TABLE products( id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT, firstname TEXT, mainname TEXT, title TEXT, price float, numpages int, playlength int, discount int )
The getInstance() method is constructed below, and its parameters are the id of the database record and thepdo object. Use them to get a row of records from the database, and then return the ShopProduct object.
//ShopProduct类, private $id = 0; //... public function setID($id) { $this->$id; } //... public static function getInstance($id, PDO $pdo) { $stmt = $pdo->prepare("select * from products where id=?"); $result = $stmt->execute(array($id)); $row = $stmt->fetch(); if (empty($row)) { return null; } if ($row['type'] == "book") { $product = new BookProduct( $row['title'], $row['firstname'], $row['mainname'], $row['price'], $row['numpages'] ); } else if ($row['type'] == "cd") { $product = new CdProduct( $row['title'], $row['firstname'], $row['mainname'], $row['price'], $row['playlength'] ); } else { $product = new ShopProduct( $row['title'], $row['firstname'], $row['mainname'], $row['price'] ); } $product->setID($row['id']); $producerMainName->setDiscount($row['discount']); return $product; } //...
As long as there is a valid PDO object, we can call this method anywhere in the program:
$dsn = "sqlite://home/bob/projects/products.db";$pdo = new PDO($dsn, null, null); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $obj = ShopProduct::getInstance(1, $pdo);
Such a method is like a "factory" and can accept raw data (such as A column of data or configuration information), and then generate objects based on this.
PHP5 can defineconstantattributes in the class. Constant attributes are declared with the const keyword. Constants do not start with a dollar sign like regular properties. By convention, constants can only be named with uppercase letters. Constant attributes can only contain basicdata types, and constant attributes can only be accessed through classes.
class ShopProduct{ const AVAILABLE = 0; const OUT_OF_STOCK = 1; //...}print ShopProduct::AVAILABLE;
The above is the detailed content of In-depth understanding of PHP object-oriented, patterns and practices-advanced features (1). For more information, please follow other related articles on the PHP Chinese website!