<?php
header(“Content-Type:text/html;charset=utf-8”);
// Procedure Oriented Programming(OPP 面向过程) Object Oriented Programming(OOP 面向对象)// php 三种变量作用域: local(局部) global(全局) static(静态)<br /> // 全局变量(函数外定义的变量),全局作用域,一般函数外使用<br /> $name = "hao"; // 全局变量<br /> function user(){<br /> //echo $name; // 无结果输出,函数内无法使用全局变量,变量和函数在内存中存储位置不一样<br /> }<br /> user();echo $name,"<br><br>"; // 输出全局变量<br /> function user1(){<br /> $name1 = "dan"; // 局部变量<br /> echo $name1,"<br><br>"; // 输出局部变量<br /> }<br /> user1(); // 调用函数// 正常情况下,变量在运行完当前页面后会销毁,如果不想销毁变量,使用静态变量<br /> // 静态变量在全局环境不起作用<br /> $age = 33;<br /> $age++;<br /> echo $age,"<br><br>";<br /> function Age(){<br /> $age = 22;<br /> echo $age,"<br><br>";<br /> $age++; // 不是静态变量,每次都会被销毁,但是它的值依然会增加,只不过增加后,结束页面又被销毁<br /> <br /> }<br /> Age(); // 22<br /> Age(); // 22<br /> Age(); // 22<br /> echo "<hr>";// 静态变量<br /> function Age1(){<br /> static $age = 22;<br /> echo $age,"<br><br>";<br /> $age++; // 是静态变量,不会被销毁<br /> }<br /> Age1(); // 22<br /> Age1(); // 23<br /> Age1(); // 24// ★★★ 全局转局部, 局部转全局<br /> $sex = "男";<br /> function g(){<br /> global $sex; // 全局转局部<br /> global $height; // 局部转全局<br /> $height = 175;<br /> echo $sex,"<br><br>";<br /> }<br /> g();<br /> echo $height,"<br><br>";// 在 $GLOBALS[index](特定名字)数组中存储全局变量,下标存变量名 数组在函数内可以使用,并能用于直接更新全局变量<br /> $x = 5;<br /> $y = 10;<br /> function test(){<br /> $GLOBALS["y"] = $GLOBALS["x"] * $GLOBALS["y"];<br /> $GLOBALS["x"] = 100; // 直接更新全局变量<br /> }<br /> test();<br /> echo $y,"<br><br>"; // 返回 50 <br /> echo $x,"<br><br>";// 面向对象 Object-oriented-programing(OOP)<br /> // 对象的三个特性<br /> /**<br /> * 对象行为 : 可以对 对象施加哪些操作(eg. 开灯,关灯)<br /> * 对象形态 : 对象的响应 (eg. 颜色,尺寸,外形)<br /> * 对象表示 : 具体区分 在相同行为以及状态下有什么不同<br /> */// 具体对象 由属性(变量)和方法(函数)组成<br /> // 类 : 相同属性和行为的一组对象的集合/**<br /> * 类 : 定义一件事物的抽象特点。类的定义包含了数据形式以及对数据的操作<br /> *对象 : 类的实例<br /> *成员变量 : 类内部的变量,该变量的值对外不可见,可以通过成员函数访问,当类被实例化成对象后,该变量是对象的属性<br /> *成员函数 : 定义在类内部,用于访问对象的数据<br /> *继承 :共享父类的数据结构和方法<br /> *多态 :相同的函数或方法,作用于多种类型的对象,返回不同的结果(快捷键在不同的软件效果不同)<br /> *重载 :函数或方法有相同的名称,但是参数不同, 同名不同参数,称为重载<br /> *封装 :将属性和行为绑在一起,放置在一个逻辑单元<br /> *构造函数 :用来在创建对象时,初始化对象,为对象成员变量赋予初值<br /> *析构函数 :释放内存<br /> */// 类 class 对象 object 实例化 new 类成员 member<br /> class thing{<br /> // 定义一个空类<br /> //var_dump(thing); // 解析错误,未定义常量<br /> }// 定义类,类名不能数字开头<br /> // 类不能直接访问,可以实例化后(new),访问对象<br /> class age{}<br /> $a = new age();<br /> var_dump($a); // object(age)#1 (0) { } #1--- 编号, (0)---成员变量(属性)个数,{ }---具体的成员变量的信息(键值对)<br /> echo "<br><br>";// ★★★ 类成员 : 成员变量、成员方法、类常量<br /> // 类变量 可以使用 var 或 public 声明变量 <br /> class person{<br /> public $name = "tom";<br /> public $age = 8;<br /> }<br /> $per = new person(); // 实例化<br /> echo $per->name,"<br><br>";<br /> <br /> $per->age = 11; // 变量重新赋值<br /> echo $per->age,"<br><br>";unset($per->age); // 删除变量<br /> echo $per->age; // 空$per->age = 15; // 添加新的变量<br /> echo $per->age,"<br><br>";$per->sex = "男"; // 添加新的变量<br /> echo $per->sex,"<br><br>";// 成员方法声明以及访问<br /> class A{<br /> function aa(){<br /> echo __FILE__,"<br><br>";<br /> }<br /> }<br /> $aaa = new A();<br /> echo $aaa->aa();// for 循环输出<br /> class B{<br /> function bb(){<br /> for($i=1;$i<=10;$i++){<br /> echo $i," ";<br /> }<br /> }<br /> }<br /> $b = new B();<br /> echo $b->bb();<br /> echo "<br><br>";// ★★★ 使用this 先要有对象, this 可以调用本类中的方法和属性,也可以调用 父类中的可用的 方法和属性<br /> class C{<br /> var $name;<br /> function user($cc){<br /> echo $this->name = $cc;<br /> }<br /> }<br /> $c = new C();<br /> $c->user("jack");<br /> echo "<br><br>";// ★★★ self 访问本类中的静态属性和静态方法,也可以访问父类的静态属性和静态方法<br /> // self 不指向任何已经实例化的对象,一般self 指向类中的静态变量<br /> // :: 范围解析操作符(域运算符) php 中调用类内部的静态成员,或者类与类之间要用 :: , 当访问类的常量时,必须使用 ::<br /> class D{<br /> static function dd(){<br /> self::ddd(); // 类与类之间调用<br /> }<br /> static function ddd(){<br /> echo "学习php <br><br>";<br /> }<br /> }<br /> D::dd(); // 调用类内部的 静态成员// ★★★ 类常量 只能用 const 常量名 = 值 <br /> class E{<br /> const PI = 3.14;<br /> }<br /> echo E::PI,"<br><br>";<br /> $ee = new E();<br /> echo $ee::PI,"<br><br>";// ★★★ 构造函数,为对象成员变量赋初值,起初始化作用,名称必须是__construct<br /> // function __construct($p1,$p2){<br /> // $this->url = $p1;<br /> // $this->title = $p2;<br /> // }// 构造函数例子<br /> class user{<br /> public $name,$age;<br /> function __construct($a,$b){<br /> $this->name = $a;<br /> $this->age = $b;<br /> }<br /> function name1(){<br /> echo $this->name.PHP_EOL;<br /> }<br /> function age1(){<br /> echo $this->age.PHP_EOL;<br /> }<br /> }<br /> $usr = new user("arcy",11);<br /> $usr->name1();<br /> echo "<br><br>";<br /> $usr->age1();<br /> echo "<br><br>";class SIS2107{<br /> private $name;<br /> private $sex;<br /> // 构造函数 初始化成员变量<br /> public function __construct($name,$sex){<br /> $this->name = $name;<br /> $this->sex = $sex;<br /> }<br /> public function show(){<br /> echo "姓名: {$this->name} <br><br>";<br /> echo "性别: {$this->sex} <br><br>";<br /> }<br /> }<br /> $sis = new SIS2107("ssss","男");<br /> $sis->show();<br />// ★★★ 析构函数<br /> // class ppp{<br /> // function __destruct(){<br /> // echo "Bye";<br /> // }<br /> // }<br /> // $p = new ppp();// 对属性或方法的访问控制,通过前面添加关键字 public private protected <br /> // 没有访问修饰符,默认public 属性必须指定访问修饰符<br /> // 封装 <br /> class My{<br /> public function on(){<br /> $this->of(); // 调用 of() 方法<br /> }<br /> public function off(){}<br /> // 设置私有,只能类中访问,外部访问报错<br /> private function of(){<br /> var_dump("开关");<br /> }<br /> }<br /> $asd = new My();<br /> $asd->on();<br /> echo "<br><br>";// ★★★ 继承 extends 代码可重用性<br /> // class a1{<br /> // public function show(){<br /> // echo "dddd";<br /> // }<br /> // }<br /> // class a2 extends a1{// }<br /> // $a22 = new a2();<br /> // $a22->show();// ★★★ 实例化调用父类成员<br /> // class a1{<br /> // public function show(){<br /> // echo "dddd";<br /> // }<br /> // }<br /> // class a2 extends a1{<br /> // public function test(){<br /> // $a = new a2();<br /> // $a->show();<br /> // }<br /> // }<br /> // $a22 = new a2();<br /> // $a22->test();//★★★ this 关键字调用父类成员<br /> class a1{<br /> public function show(){<br /> echo "dddd";<br /> }<br /> }<br /> class a2 extends a1{<br /> public function test(){<br /> $this->show();<br /> }<br /> }<br /> $a22 = new a2();<br /> $a22->test();<br /> echo "<br><br>";// protected 受保护的,在整个继承链上使用// class a3{<br /> // protected $num = 10;<br /> // }<br /> // class b3 extends a3{<br /> // public function show(){<br /> // echo $this->num;<br /> // }<br /> // }<br /> // $ab = new b3();<br /> // $ab->show();class a3{<br /> public function show(){<br /> echo $this->num;<br /> }<br /> }<br /> class b3 extends a3{<br /> protected $num = 13;<br /> }<br /> $ab = new b3();<br /> $ab->show();<br /> echo "<br><br>";// 方法重写,从父类继承下来的属性方法重新定义 父类public 子类只能public 父类protected 子类public、protected都可以<br /> // 父类的private 子类无法继承<br /> // 父类方法有参数,子类若想覆盖方法,必须带参数且数量一致 构造方法,子类参数只能和父类相同或更多class animal{<br /> public $weight = 0;<br /> public function eat(){<br /> echo "动物吃东西";<br /> }<br /> }class cat extends animal{<br /> public $weight = 50;<br /> // 覆盖父类方法<br /> public function eat(){<br /> echo "猫吃东西".PHP_EOL;<br /> $this->weight +=5;<br /> }<br /> }class tiger extends animal{<br /> // 覆盖父类方法<br /> public function eat(){<br /> echo "老虎吃东西".PHP_EOL;<br /> $this->weight +=100;<br /> }<br /> }$cat = new cat();<br /> $cat->eat();<br /> echo "<br><br>";<br /> echo "猫的体重 :".$cat->weight.PHP_EOL,"<br><br>";<br /> $tiger = new tiger();<br /> $tiger->eat();<br /> echo "<br><br>";<br /> echo "老虎的体重 :".$tiger->weight.PHP_EOL,"<br><br>";// 多态 同一操作,作用于不同对象,结果不同 灵活,降低耦合// 接口interface 接口就是对不同类的共同行为进行定义,之后在不同的类里面实现不同的功能<br /> // 接口规定了某一个事物必须有哪些行为<br /> // 接口中定义的所有方法必须是公有的<br /> // 实现接口,implements 类中必须将接口中定义的所有方法实现,否则会出现严重错误<br /> // 接口使得代码 高内聚,低耦合// 接口的具体实现<br /> /**<br /> * 接口定义 interface 接口名 {}<br /> * 接口里的方法没有{} 接口里的方法不需要具体实现<br /> * 类实现接口定义 class A implements 接口 {}<br /> * 类实现一个接口,就要实现接口里的所有定义好的方法<br /> * 接口不能实例化<br /> * instanceof 判断类的实例是否实现了一个接口 A对象实例 B接口 返回true,表明A对象实例对应的类实现了B接口<br /> * 通过extends可以让一个接口继承另一个接口<br /> * 当一个类要实现子接口时,不仅要实现子接口里的方法,同时要实现父接口里的所有方法<br /> */// 若没有实现接口的方法就会报错<br /> <br /> /**<br /> * 定义接口<br /> */ <br /> interface Action{<br /> public function eat();<br /> public function walk();<br /> public function sleep();<br /> }/**<br /> * 定义实现接口的类<br /> */<br /> class People implements Action{<br /> // 一旦要实现一个接口,就要实现接口里的所有方法<br /> public function eat() {}<br /> public function walk() {}<br /> public function sleep() {}<br /> }<br /> $people = new People();// 通过 instanceof 判断某个类的实例是否实现了一个接口 A对象实例 instanceof B接口,返回true表明对象实例实现了接口<br /> print_r($people instanceof Action); // 返回 1 (true)<br /> echo "<br><br>";/**<br /> * 通过 extends 让一个接口继承另一个接口<br /> */<br /> interface Action1 extends Action{<br /> public function talk();<br /> public function think();<br /> }// 一个类 要实现子接口,不仅要实现子接口的方法,还要实现父接口的所有方法<br /> // 即两个接口的所有方法都需要实现 , 若是有一个接口没有写入,就会报错<br /> class Human implements Action1{<br /> public function eat() {}<br /> public function talk() {}<br /> public function walk() {}<br /> public function think() {}<br /> public function sleep() {}<br /> } <br /> $human = new Human(); <br /> print_r($human instanceof Action1); // 返回 1<br /> echo "<br><br>";/**<br /> * 多态就是 每个接口都可以有不同的实现<br /> */<br /> // 定义 接口: Eat<br /> interface Eat{<br /> public function eat();<br /> }<br /> // 定义 Tiger1<br /> class Tiger1 implements Eat{<br /> public function eat(){<br /> echo "老虎吃肉 <br><br>";<br /> }<br /> }<br /> // 定义 Person1<br /> class Person1 implements Eat{<br /> public function eat(){<br /> echo "吃东西前,洗一洗 <br><br>";<br /> }<br /> }function Eat($obj){<br /> if($obj instanceof Eat){<br /> $obj->eat();<br /> }else{<br /> echo "该对象没有实现 Eat 方法 <br><br>";<br /> }<br /> }<br /> $tiger1 = new Tiger1();<br /> $person1 = new Person1();<br /> Eat($tiger1);<br /> Eat($person1);/**<br /> * 类常量 : 将类中保持不变的值定义为常量,在定义和使用常量时不需要$符号,常量的值必须是一个定值<br /> * 定义常量只能使用 const 关键字<br /> * 类常量属于类,不属于对象,对象不能访问类常量,常量的访问必须通过类来实现(类名 :: 常量名)<br /> */class Profession {<br /> const PHP = "PHP软件开发工程师";<br /> }<br /> $pro = new Profession(); // 类外部获取<br /> echo $pro->PHP; // 没有效果// echo PHP."<br><br>"; // 类外无法获取<br /> echo Profession::PHP,"<br><br>"; // 成功返回/**<br /> * static 关键字 <br /> *声明类属或方法为静态,就可以不用实例化类,直接访问<br /> *静态属性不能通过实例化对象访问,但是静态方法可以<br /> *静态方法不需要通过对象即可调用,所以$this在静态方法中不能使用 <br /> *静态属性不能 对象-> 访问<br /> */class Foo{<br /> public static $my = "foo";<br /> public function staticval(){<br /> return self::$my;<br /> }<br /> }print Foo::$my.PHP_EOL;<br /> $foo = new Foo();<br /> echo "<br><br>";<br /> print $foo->staticval().PHP_EOL;
?>
