作业1:类的声明与实例化
实例
<?php /** 类的声明与实例化 */ //声明一个类man; class man{ //类属性必须定义为公有,受保护,私有之一,可以不初始值; public $name; protected $sex; private $age; public function speak (){ echo 'I can speak English !'; } function __construct($name,$sex,$age) //构造方法,用来初始化 { $this->name = $name; $this->sex = $sex; $this->age = $age; } } //实例化一个类 $man1 =new man('peter','male',18); //访问以下,他的方法 echo $man1->name; echo '<br>'; $man1->speak();
运行实例 »
点击 "运行实例" 按钮查看在线实例
作业2:类常量与类属性的重载;
实例
<?php /** 类常量与类属性的重载 */ class staff{ public $name; public $sex; protected $age; private $salary; const ATTACH_TO = 'Apple.lnc'; //类常量 //构造方法 public function __construct($name,$sex,$age,$salary) { $this->name = $name; $this->sex = $sex; $this->age = $age; $this->salary = $salary; } // get方法的,全局 public function __get($name) { if ($name == 'salary'){ return $name.'不对外公开'; }else{ return $this->$name; } } // set 方法 更新属性重载 public function __set($name, $value) { if ($name == ('age' or 'salary')){ echo $name.'不允许更改!'; }else{ $this->name = $value; } } // isset 重载 public function __isset($name) { if ($name == 'salary'){ return 'false'; } return isset($this->$name); //有就返回true } //销毁属性重载 public function __unset($name) { if ($name == 'salary' || 'age'){ return false; } unset($this->$name); } } //访问类常量 echo '隶属于:',staff::ATTACH_TO,'<br>'; //new 一个实例 $employee = new staff('core','meal','22',6000); //访问 employee 的属性,方法 //公共属性,所以可以外部访问 echo '姓名:'.$employee->name.'性别:'.$employee->sex; echo '<br>'; // 尝试获取私有属性 echo $employee->salary; //不对外公开 echo '<br>'; // isset 检测是否有该属性 echo isset($employee->friend)?'存在':'不存在'; echo '<br>'; //unset 销毁 unset($employee->age); //unset 无返回值 echo $employee->age;
运行实例 »
点击 "运行实例" 按钮查看在线实例
作业3:类的继承与方法重写
实例
<?php /** 类的继承与方法重写 * 子类可以继承父类除私有的全部属性 * 子类重新父类方法,覆盖 * 类常量也可以被重写 */ class staff { public $name; public $sex; protected $age; private $salary; const ATTACH_TO = 'Apple.lnc'; //类常量 //构造方法 public function __construct($name, $sex, $age, $salary) { $this->name = $name; $this->sex = $sex; $this->age = $age; $this->salary = $salary; } public function speak(){ echo 'we can speak English!'; } } class staff_cn extends staff{ //提高代码重用性。 public $department; // 子类特有属性 const ATTACH_TO = 'Apple.cn.lnc';//重写父类常量 public function __construct($name, $sex, $age, $salary,$department) //重写父类构造方法(多态) { /* $this->name = $name; $this->sex = $sex; $this->age = $age; $this->salary = $salary;*/ parent::__construct($name, $sex, $age, $salary);//引用父类,简化代码 $this->$department= $department; } public function speak(){ //重写父类一般方法 echo 'we can speak chinese and english!'; } } $employee1 = new staff_cn('jimmy','male','66',8000,'cn'); //echo $employee1->salary;// 无法访问父类私有的属性 //echo $employee1->age; //只能在子类内部使用 $employee1->speak(); //调用子类的speak而不是父类的speak(); echo '<br>'; echo staff::ATTACH_TO; echo '<br>'; echo staff_cn::ATTACH_TO;
运行实例 »
点击 "运行实例" 按钮查看在线实例
作业4:类中静态成员的声明与访问
实例
<?php /** 声明类属性或方法为 static(静态),就可以不实例化类而直接访问。 静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。 由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用,而是使用self。 静态属性不可以由对象通过 -> 操作符来访问。 * * * 范围解析符的作用: * 1. 访问静态成员; * 2. 访问类常量; * 3. 继承上下文中引用被覆盖成员 */ class Demo5{ //声明2个静态成员 public static $pdo; protected static $db =['type'=>'mysql','host'=>'localhost','dbname'=>'stu','user'=>'root','pass'=>'root']; // 静态方法 public static function connect(){ //用来连接数据库的方法 $dsn = self::$db['type'].':host='.self::$db['host'].';dbname='.self::$db['dbname']; //拼接一个dsn 字符串 self::$pdo = new PDO($dsn,self::$db['user'],self::$db['pass']); //将new 的pdo赋值给static变量 } //准备SQL语句与执行 public static function select($talbe,$fields,$num){ // 搞一个预处理对象 $stmt = self::$pdo->prepare("select {$fields} from {$talbe} limit {$num}"); //执行预处理语句 $stmt->execute(); //返回结果集 return $stmt->fetchAll(PDO::FETCH_ASSOC);//只取关联数组,不要索引 } } Demo5::connect(); //调用connect()方法连接数据库 $result = Demo5::select('student','name,sex,class',3); //调用select()方法,查询数据 echo '<pre>',var_export($result);
运行实例 »
点击 "运行实例" 按钮查看在线实例