中国电子信息网,百度seo wordpress插件,十大网上购物平台,个人网站备案名称本文实例讲述了PHP面向对象程序设计高级特性。分享给大家供大家参考#xff0c;具体如下#xff1a;静态属性class StaticExample {static public $aNum 0; // 静态共有属性static public function sayHello() { // 静态共有方法print hello;}}print StaticExam…本文实例讲述了PHP面向对象程序设计高级特性。分享给大家供大家参考具体如下静态属性class StaticExample {static public $aNum 0; // 静态共有属性static public function sayHello() { // 静态共有方法print hello;}}print StaticExample::$aNum;StaticExample::sayHello();?输出0 hello点评静态属性和方法可以通过类直接调用。SELFclass StaticExample {static public $aNum 0;static public function sayHello() { // 这里的static 和 public的顺序可以颠倒self::$aNum;print hello (.self::$aNum.)\n; // self 指向当前类, $this指向当前对象。}}StaticExample::sayHello();StaticExample::sayHello();StaticExample::sayHello();?输出hello (1)hello (2)hello (3)点评self 指向当前类, this指向当前对象。self可以调用当前类的静态属性和方法。this指向当前对象。self可以调用当前类的静态属性和方法。this可以调用当前类的正常属性和方法。常量属性class ShopProduct {const AVAILABLE 0; // 只能用大写字母命名常量const OUT_OF_STOCK 1;public $status;}print ShopProduct::AVAILABLE;?输出0点评常量只能用大写字母并且可以通过类直接调用。接口interface Chargeable { // 接口,抽象类是介于基类与接口之间的东西public function getPrice();}class ShopProduct implements Chargeable {// ...protected $price;// ...public function getPrice() {return $this-price;}// ...}$product new ShopProduct();?如果没有实现getPrice方法将会报错。Fatal error: Class ShopProduct contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Chargeable::getPrice)继承类与接口class TimedService{ }interface Bookable{ }interface Chargeable{ }class Consultancy extends TimedService implements Bookable, Chargeable { // 继承类与接口// ...}?抽象类先来看一段代码abstract class DomainObject {}class User extends DomainObject {public static function create() {return new User();}}class Document extends DomainObject {public static function create() {return new Document();}}$document Document::create();print_r( $document );?输出Document Object()静态方法abstract class DomainObject {private $group; // 私有属性grouppublic function __construct() {$this-group static::getGroup();//static 静态类}public static function create() {return new static();}static function getGroup() { // 静态方法return default;}}class User extends DomainObject {}class Document extends DomainObject {static function getGroup() { // 改变了内容return document;}}class SpreadSheet extends Document { // 继承之后group也就与document相同了}print_r(User::create());print_r(SpreadSheet::create());?输出User Object([group:DomainObject:private] default)SpreadSheet Object([group:DomainObject:private] document)final字段使类无法被继承用的不多final class Checkout { // 终止类的继承// ...}class IllegalCheckout extends Checkout {// ...}$checkout new Checkout();?输出Fatal error: Class IllegalCheckout may not inherit from final class (Checkout)final方法不能够被重写class Checkout {final function totalize() {// calculate bill}}class IllegalCheckout extends Checkout {function totalize() { // 不能重写final方法// change bill calculation}}$checkout new Checkout();?输出Fatal error: Cannot override final method Checkout::totalize()析构函数class Person {protected $name;private $age;private $id;function __construct( $name, $age ) {$this-name $name;$this-age $age;}function setId( $id ) {$this-id $id;}function __destruct() { // 析构函数if ( ! empty( $this-id ) ) {// save Person dataprint saving person\n;}if ( empty( $this-id ) ) {// save Person dataprint do nothing\n;}}}$person new Person( bob, 44 );$person-setId( 343 );$person-setId( ); // 最后执行析构函数使用完之后执行?输出do nothing__clone方法克隆的时候执行class Person {private $name;private $age;private $id;function __construct( $name, $age ) {$this-name $name;$this-age $age;}function setId( $id ) {$this-id $id;}function __clone() { // 克隆时候执行$this-id 0;}}$person new Person( bob, 44 );$person-setId( 343 );$person2 clone $person;print_r( $person );print_r( $person2 );?输出Person Object([name:Person:private] bob[age:Person:private] 44[id:Person:private] 343)Person Object([name:Person:private] bob[age:Person:private] 44[id:Person:private] 0)再看一个例子class Account { // 账户类public $balance; // 余额function __construct( $balance ) {$this-balance $balance;}}class Person {private $name;private $age;private $id;public $account;function __construct( $name, $age, Account $account ) {$this-name $name;$this-age $age;$this-account $account;}function setId( $id ) {$this-id $id;}function __clone() {$this-id 0;}}$person new Person( bob, 44, new Account( 200 ) ); // 以类对象作为参数$person-setId( 343 );$person2 clone $person;// give $person some money$person-account-balance 10;// $person2 sees the credit tooprint $person2-account-balance; // person的属性account也是一个类他的属性balance的值是210// output:// 210?点评学习还是能够开拓大脑的今天终于明白为什么有多个箭头的概念了$person-account-balance。这里的account属性是一个对象。__toStringclass Person {function getName() { return Bob; }function getAge() { return 44; }function __toString() {$desc $this-getName(). (age ;$desc . $this-getAge().);return $desc;}}$person new Person();print $person; // 打印时候集中处理// Bob (age 44)?点评必须是print或echo时才有效print_r就输出对象。Person Object()希望本文所述对大家PHP程序设计有所帮助。