Correction status:Uncorrected
Teacher's comments:
1、类声明与类的实例化
<?php echo '<meta charset="UTF-8">'; echo '<h1>类声明与类的实例化</h1><hr>'; //声明一个类,类的首写字母用大写 class Task1 { } //用关键字new实例化一个类,即创建了一个变量(对象) $task1 = new Task1(); //给这个当前的对象用指向符 ->添加一些属性值和方法即函数 $task1 ->name = 'arthur'; $task1 ->age = 38; $task1 ->salary = function (){ return '我的工资对外保密!'; }; //对象指向符同时也是对象访问符,在类与对象外部可以通过对象访问符进行访问对象的属性 echo $task1 ->name ,'的年龄是:',$task1 ->age ,'岁!','<br>'; //对象内部的函数本质上也是对象的属性的一种,应该用回调的方式进行访问查看 echo call_user_func($task1 ->salary);
点击 "运行实例" 按钮查看在线实例
2、类常量与类属性的重载
<?php echo '<meta charset="UTF-8">'; echo '<h1>类常量与类属性的重载</h1><hr>'; //什么是类常量 //根据我的理解,类常量就是提供了给该类对象的一个公共属性 //创建类常量使用const固定方式,且创建的类常量默认属性为Public class Task2 { // const 后面好像需要完全大写 const COR_NAME = '南通税企通'; private $project; private $money; private $admin; // 使用固定方式__construct()来构建对象的方法,可以实现自动调用 public function __construct($project,$money,$admin) { // 使用伪变量指定对象属性 $this ->project = $project; $this ->money = $money; $this ->admin = $admin; // 当有可以调用的内容之后,使用指向符->show()实现方法的调用 // 就是new了之后就自动调用实行并输出了 echo $this ->show(); } // 输出属性的内容 public function show(){ return $this ->project . '的价格是:'. $this ->money .'元;负责人是:'. $this ->admin; } //获取属性的重载 public function __get($ming) { if ($ming == 'money'){ return $ming.'不允许查看'; } return $this ->$ming; } // 设置属性的重载 public function __set($ming1, $value) { if ($ming1 == 'money'){ return $ming1.'不允许修改价格'; } $this ->$ming1 = $value; } // 检测属性的重载 public function __isset($ming2) { if ($ming2 == 'money'){ return false; } return isset($this ->$ming2); } // 销毁属性的重载 public function __unset($ming3) { if ($ming3 == 'project' || $ming3 == 'money'){ return false; } unset($this ->$ming3); } } //类常量的访问,类常量不属于任何一个对象,所以应该使用类来访问 echo '公司名称:',Task2::COR_NAME ,'<br>'; //实例化Task2,创建对象 $task2 = new Task2('委托申报',500,'arthur'); //var_dump($task2); echo '<hr>'; //输出属性的内容 //echo $task2 ->show(); //属性的重载有四个场景:获取,设置,检测,销毁; //当从类的外部访问类中不存在或无权访问的属性的时候,这些重载方法会被自动触发! //1,属性重载的获取 echo '项目名称是:',$task2 ->project, '<br>'; echo '项目价格是:',$task2 ->money,'<br>'; echo '<hr>'; //2,属性重载的设置 $task2 ->project = '委托记账'; echo '更新后的项目名称是:',$task2 ->project, '<br>'; echo $task2 ->money = 5000; //这边直接输出就=5000了,是可以修改的,请老师指教啊!!! echo '<hr>'; //3,属性重载的检测 echo isset($task2 ->project) ? '存在<br>' : '<span style="color: red;">不存在</span>'; echo isset($task2 ->money) ? '存在<br>' : '<span style="color: red;">不存在</span>'; echo '<hr>'; //4,属性重载的销毁 unset($task2 ->admin); echo isset($task2 ->project) ? '存在<br>' : '<span style="color: red;">不存在</span>'; echo isset($task2 ->money) ? '存在<br>' : '<span style="color: red;">不存在</span><br>'; echo isset($task2 ->admin) ? '存在<br>' : '<span style="color: red;">不存在</span>';
点击 "运行实例" 按钮查看在线实例
3、类的继承与方法重写
<?php echo '<meta charset="UTF-8">'; echo '<h1>类的继承与方法重写</h1><hr>'; class Task3{ const COR_NAME = '南通税企通'; public $project; protected $money; private $arthur; // 父类构造器 public function __construct($project,$money) { $this ->project = $project; $this ->money = $money; } } //创建一个子类并用extends继承父类 class Task3_1 extends Task3 { // 类常量也可以在子类中重写 const COR_NAME = '天业税企通'; // 创建子类自由属性 private $leval; // 将父类中的构造方法进行重新设置,即多态 public function __construct($project, $money, $leval) { // 这就是多态 parent::__construct($project, $money); $this ->leval = $leval; } public function __get($ming) { if (isset($this ->$ming)){ return $this ->$ming; }return '该属性不存在'; } } //new的谁,谁就是工作类,所以属性方法的重写应该放到工作类中 $task3_1 = new Task3_1('委托申报',500,'vip1'); echo $task3_1 ->project,'<br>'; echo $task3_1 ->money,'<br><hr>'; echo $task3_1 ->leval,'<br><hr>'; echo Task3::COR_NAME,'<br>'; echo Task3_1::COR_NAME,'<br>';
点击 "运行实例" 按钮查看在线实例
4、类中静态成员的声明与访问
<?php echo '<meta charset="UTF-8">'; echo '<h1>类中静态成员的声明与访问</h1><hr>'; //什么是静态?static就是静态:)其实,在类中,所有成员只要没有声明是静态,那就都是动态 //静态成员不需要用伪变量来指向访问,同时静态成员是被所有对象所共享,是用类来访问的 //访问时,类名后必须使用双冒号,即范围解析符 :: ,而在类中引用自己用关键字,self:: class Task4{ public static $pdo = null; protected static $db = [ 'type' => 'mysql', 'host' => '127.0.0.1', 'dbname' => 'php', 'user' => 'root', 'pass' => 'root', ]; public static function connect() { $dsn = self::$db['type'].':host='.self::$db['host'].';dbname='.self::$db['dbname']; self::$pdo = new PDO($dsn,self::$db['user'],self::$db['pass']); } public static function select($table,$fields='*', $num=5) { $stmt = self::$pdo->prepare("SELECT {$fields} FROM {$table} LIMIT {$num}"); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } } //连接数据库 Task4::connect(); var_dump(Task4::$pdo); //进行数据库查询 $result = Task4::select('staff','name,age,salary',6); echo '<pre>',var_export($result);
点击 "运行实例" 按钮查看在线实例