类声明及类的实例化```php
<?php
// class关键字声明类
class a{
public $name ;//public公共成员
protected $price ;//protected受保护的成员,在当前类中和子类中访问,类的外部不可访问
private $sum ;//private私有成员,仅限本类中访问
protected static $combined ; //static 关键字用来声明静态成员和方法
// __construct 类的构造函数
public function __construct($name = '',$price = '',$sum = '')
{
// $this是类实例的引用
// 用$this关键字来对类的成员属性进行初始化
$this->name =$name;
$this->price=$price;
$this->sum=$sum;
}
public function show(){
return '名称:' .$this -> name.' 单价:'.$this->price . '元' . ' 数量: ' . $this->sum . '个';
}
public static function index($combined){
// $this 代表当前对象!! 静态方法中应该使用 类名 、 self 或者 static 关键字来代替!
return self::$combined = $combined;
}
public function combined(){
$data = '名称:' .$this -> name.' 单价:'.$this->price . '元 数量: ' . $this->sum . '个 合计:' . $this ->price * $this->sum . '元';
return $data;
}
}
// new关键字用来实例化类
$obj = new a('php',99,2);
// 类实例调用
//
echo $obj -> show();
echo '<br>';
echo $obj -> combined();
echo '<br>';
// 注:类实例也可以访问静态方法,但不推荐这样用;并且类实例不能访 问静态成员
echo $obj -> index('你好php111');
echo '<br>';
// 用静态访问静态方法
//注:不能用静态访问普通成员和普通方法
echo a::index('你好php');
静态成员与类的扩展
<?php
class static1{
public static $name;
protected static $age;
public function __construct($name,$age)
{
// self关键字为类的引用 仅限在本类中使用
// 也可以使用static关键字来访问类中的静态方法及静态成员
self::$name=$name;
self::$age=$age;
}
public static function show(){
return "姓名: ".self::$name . " 年龄:" . self::$age;
}
}
// new static1('张三','25');
// 在类外可以是类名方位静态方法及静态成员 无需new一个对象
// echo static1::$name;
echo static1::show();
trait与父类的区别
trait类:
<?php
trait b{
// trait: 理解为一个公共方法集
// trait 借用了class语法实现的一个轻量级的"类",但不是类,所以不能"实例化"
// 要使用trait的类中,在子类中使用use关键字引用它即可
// 引入并继承trait b类
// 为防止trait重名可以取别名:
// use b{
// 别名
// b::show as b_show;
// }
// 注:在父类和trait及子类中同时存在同一方法时 子类优先级最高 其次是trait,最后才是父类
public function show(){
return '欢迎学习php';
}
}
父类:
<?php
class parent1{
public $name;
public $age;
public function __construct($name = '',$age = '')
{
$this -> name = $name;
$this -> age = $age;
}
public function show(){
return "姓名:{$this -> name} 年龄:{$this -> age}";
}
}
子类:
<?php
// extends为 继承父类或者扩展
class wage extends parent1{
// 引入并继承trait b类
// 为防止trait重名可以取别名:
// use b{
// 别名
// b::show as b_show;
// }
use b;
public function __construct($name='',$age='',$wage='')
{
// parent调用父类中的方法和属性
parent::__construct($name,$age);
$this->wage =$wage;
}
// public function show(){
// return parent::show(). " 工资: " .$this->wage;
// }
}
类的自动加载器
<?php
// 类的自动加载器
spl_autoload_register(function($className){
// echo $className;
require $className.'.php';
});