oop基础:请举例实例演绎以下难点
- 类(对象抽象化的结果)与对象 (类实例化结果)
```php
<?php
/**- 1.变量是实现数据的利用,函数是实现代码块的利用
- 2.类是具有相同属性和方法的对象的集合
- 3.对象是复合数据类型
- 4.oop(面向对象的程序设计中)的三大特性:封装性、继承性、多态
- 封装是:隐藏对象的属性或方法(实现细节),目的是为了控制在程序中属性的读或修改的访问级别,
- 使用者只城要通过外部接口以特定的权限来使用类成员。
*/
class Player{
//成员属性前一定要有访问修饰符:public protected private
public $name;
public $height;
public $team;
// protected 只能被本类和子类访问
protected $playNum = 23;
// private 只能被本类访问
private $weight;
//如何给 protected private 属性赋值
// __construct()魔术方法 也叫构造函数、构造器:类实例化一次就被自动调用一次
public function __construct($name,$height,$team,$playNum,$weight){
/**
* 1.初始化类成员,让类、实例化的状态稳定下来
* 2、给对象属性进行初始化赋值
* 3、可以给私有成员,爱保护的成员初始化赋值
*/
$this->name = $name;
$this->height = $height;
$this->team = $team;
$this->playNum = $playNum;
$this->weight = $weight;
}
public function jog(){
//$this 特殊的对象引用:代表对象
return "$this->name is jogging ,whose playNum is $this->playNum<br>";
}
public function shoot(){
return “$this->name is shooting ,weighting $this->weight<br>“;
}
}
$jordan = new Player(‘Jordan’,’203cm’,’Bulk’,6,’80kg’);
//echo $jordan->weight.’<br>‘;
echo $jordan->shoot();
?>
2. 构造方法
```php
public function __construct($name,$price)
{
$this->name = $name;
$this->price = $price;
}
对象成员之间的内部访问 $this
public function show(){
return "{$this->name}的单价为{$this->price}元";
}
private仅限本类中使用 protected本类中,子类中使用
class User{
public static $name =’胡歌’;
protected $_config =['auth_on' =>'true',
'auth_type'=> 1
];
public static $nation = 'China';
private $salary;
static $count = 0;
public function __construct($name,$salary){
//静态成员与类的实例无关,不能用$this访问,用self::类的引用
// 访问静态成员
self::$name = $name;
self::$count++;
$this->salary =$salary;
}
类的自动加载 spl_autoload_register
<?php
/**- 类的自动加载:类名称与类文件名称保持一致
*/
spl_autoload_register(function($className)){
require $className.’.php’;
}- 类的自动加载:类名称与类文件名称保持一致
- 静态成员的访问 类的引用self::
public function __construct($name,$salary){
}//静态成员与类的实例无关,不能用$this访问,用self::类的引用
// 访问静态成员
self::$name = $name;
self::$count++;
$this->salary =$salary;
- 类的继承 扩展 父类方法(魔术方法,普通方法)的重写 parent:: 调用父类成员
class Son extends Product
{
//属性扩展
private $num;
//重写父类构造器
public function __construct($name,$price,$num){
}//parent关键字,调用父类中的成员方法
parent::__construct($name,$price);
$this->num = $num;