面向对象 对象概念是面向对象技术的核心。在显示世界里我们所面对的事情都是对象,如计算机、电视机、自行车等。在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象.
对象的主要三个特性
对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为。
对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型。
对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同。
面向对象模型
面向对象的概念:
oop(面向对象的编程)它能是其代码更加简洁易于维护并且具有更强的可重性
1、PHP面向对象(三)
四、OOP的高级实践
4.3 Static-静态成员
<?php date_default_timezone_set("PRC"); /** * 1. 类的定义以class关键字开始,后面跟着这个类的名称。类的名称命名通常每个单词的第一个字母大写。 * 2. 定义类的属性 * 3. 定义类的方法 * 4. 实例化类的对象 * 5. 使用对象的属性和方法 */ class Human{ public $name; public $height; public $weight; public function eat($food){ echo $this->name."'s eating ".$food."<br/>"; } } class Animal{ public $kind; public $gender; } class NbaPlayer extends Human{ // 类的属性的定义 public $name="Jordan";// 定义属性 public $height="198cm"; public $weight="98kg"; public $team="Bull"; public $playerNumber="23"; private $age="44"; public $president="David Stern"; // 类的方法的定义 public function changePresident($newP){ $this->president=$newP; } public function run() { echo "Running<br/>"; } public function jump(){ echo "Jumping<br/>"; } public function dribble(){ echo "Dribbling<br/>"; } public function shoot(){ echo "Shooting<br/>"; } public function dunk(){ echo "Dunking<br/>"; } public function pass(){ echo "Passing<br/>"; } public function getAge(){ echo $this->name."'s age is ".$this->age; } function __construct($name, $height, $weight, $team, $playerNumber){ print $name . ";" . $height . ";" . $weight . ";" . $team . ";" . $playerNumber."\n"; $this->name = $name; // $this是php里面的伪变量,表示对象自身 $this->height = $height; // 通过$this可以设置对象的属性值 $this->weight = $weight; $this->team = $team; $this->playerNumber = $playerNumber; } } /** * 1. 类实例化为对象时使用new关键字,new之后紧跟类的名称和一对括号。 * 2. 使用对象可以像使用其他值一样进行赋值操作 */ $jordan = new NbaPlayer("Jordan", "198cm","98kg","Bull","23");echo "<br/>"; $james=new NbaPlayer("James", "203cm", "120kg", "Heat", "6");echo "<br/>"; // 访问对象的属性使用的语法是->符号,后面跟着属性的名称 echo $jordan->name."<br/>"; // 调用对象的某个方法使用的语法是->符号,后面跟着方法的名称和一对括号 $jordan->run(); $jordan->pass(); //子类调用父类的方法 $jordan->eat("apple"); //试着调用private,直接以及通过内部的public函数 //$jordan->age; $jordan->getAge();echo "<br/>"; $jordan->changePresident("Adam Silver"); echo $jordan->president."<br/>"; echo $james->president."<br/>"; 直接从上述例子开始吧。 这里想得到的是,把两位对象的某一个变量同时变掉。——用static public static $president="David Stern"; // 类的方法的定义 public static function changePresident($newP){ static::$president=$newP;//这里static换成self更符合规范 }
注意这里static的位置,以及,方法内的::
调用的方法也有所变动。
echo NbaPlayer::$president;echo "<br/>";
NbaPlayer::changePresident("Adam Silver");
echo NbaPlayer::$president;echo "<br/>";
也就是像之前说的,静态成员就是个常量,所以不针对某个具体的对象(不受具体对象的约束)——基于此,定义&赋值&调用都不需要具体的对象参与。
内部调用要用self/static::$...
外部调用,类名::
用处就是所有的对象共用的数据。
--如果内部调用时,变量在父类中
比如说,在上述例子中,父类human中写这么一句话
public static $aaa="dafdfa";
然后在子类nbaplayer中,调用父类的静态成员时,要
echo parent::$aaa;
而外部调用,按照上面说的,类名::,所以,直接父类类名即可
echo Human::$aaa;
--其他
在静态方法中,是无法访问其他变量的,也就是说,不能用$this->
--小结