PHP 是后端脚本语言,回顾一下:
1.1 PHP 数组:
1 <?php 2 $user = array(); // 定义一个数组 3 $user[0] = 'zhangsan'; // 给数组赋值 4 $user[2] = 'lizi'; // 给数组赋值 5 echo count($user).'<br>'; //输出数组中元素的个数 6 print_r( $user ); // 打印数组的详细项目 7 ?>
运行结果:
1.2 数组输出乱码:
<?php $user = array(); // 定义一个数组 //[] 是在该数组 最大的数字索引上+1 $user[] = 'zhangsan'; $user[8] = '李四'; $user[] = '王明'; $user[] = '张三'; $user[] = '毛小芳'; $user[] = 'wangwu'; echo count($user).'<br>'; print_r( $user ); ?>
1.3 在PHP文件开头加入header("Content-type: text/html; charset=utf-8");
<?php header("Content-type: text/html; charset=utf-8"); $user = array(); // 定义一个数组 //[] 是在该数组 最大的数字索引上+1 $user[] = 'zhangsan'; $user[8] = '李四'; $user[] = '王明'; $user[] = '张三'; $user[] = '毛小芳'; $user[] = 'wangwu'; echo count($user).'<br>'; print_r( $user ); ?>
乱码变OK了:
1.4 array_keys() 获取数组的键的数组(这里有点类似js中Object.keys() 获取对象的键的数组),array_values()获取数组的值组成的数组
implode(): 把数组链接成字符串:语法implode(separator,array);
separator 可选,规定在数组元素之间放置的内容;如果没有separator 则默认是""(空字符串)
explode():把字符串分隔,然后组合成数组:语法explode(separator,string,limit) ;
separator 必须,规定在哪里分隔字符串
string必须,需要分隔的字符串
limit 可选,规定返回的数组的最大数量
1 <?php 2 header("Content-type: text/html; charset=utf-8"); 3 $user = array( 4 'title' => '星星', 5 'content' => '恒星', 6 'age' => '25亿万年' 7 ); 8 $keys = array_keys( $user ); 9 print_r( $keys ); 10 //implode--->join (在js中用join进行链接) implode 把数组以','为分隔符链接成字符串;格式 implode(separator,array); 11 // explode 把字符串分隔成数组,格式 explode(separator,string,limit) 12 echo implode( ",", $keys )."<br>"; 13 $values = array_values( $user ); 14 print_r( $values ); 15 echo implode( "','", $values )."<br>"; 16 ?>
运行结果:
1.5 遍历数组:
1 <?php 2 header("Content-type: text/html; charset=utf-8"); 3 $userList = array( 4 0 => array( 5 '张三', 6 '李四', 7 ), 8 1 => array( 9 '小星星', 10 '小强强' 11 ) 12 ); 13 // 这里的foreach 类似js中的forEach()以及for(var i in obj) 14 foreach( $userList as $k => $v ){ 15 echo $k . '--->' . $v[0] . '--->' . $v[1] . '<br/>'; 16 } 17 echo "<br>"."--------------这里是分割符------------------"."<br>"."<br>"; 18 foreach( $userList as $k => $v ){ 19 // echo $k . '--->'; 20 echo $k; 21 foreach( $v as $k2 => $v2 ){ 22 echo '---->' . $v2; 23 } 24 echo '<br/>'; 25 } 26 ?>
运行结果:
1.5.2 foreach遍历:
格式:foreach($arr as $key => $value) ,也可以简写为for($arr as $value) 省略$key
1 <?php 2 header("Content-type: text/html; charset=utf-8"); 3 $arr = array( 4 0 => 1, 5 3 => 10, 6 5 => 100 7 ); 8 9 foreach( $arr as $key => $val ){ 10 echo $key . '-->' . $val . '<br/>'; 11 } 12 13 foreach( $arr as $val ){ 14 echo $val . '<br/>'; 15 } 16 ?>
1.5.3 for循环,缺点是不能遍历不连续的数字索引,或者字符串索引
1 <?php 2 header("Content-type: text/html; charset=utf-8"); 3 $arr = array( 4 0 => 1, 5 3 => 10, 6 5 => 100 7 ); 8 9 echo '数组的长度是:'.count($arr).'<br>'; //3 10 11 //$i---> 0, 1, 2 12 //for循环的缺点:不能遍历 不连续的数字索引 和 字符串索引 13 for( $i = 0; $i < count( $arr ); $i++ ){ 14 // $arr[0] $arr[1] $arr[2] 15 echo $arr[$i] . '<br/>'; 16 } 17 18 ?>
2. 创建一个类
1 <?php 2 /* 3 定义一个类:格式如下 4 class 类名称 { 5 6 } 7 类是由n个属性和方法组成的 8 */ 9 10 header("Content-type: text/html; charset=utf-8"); 11 class MobilePone{ 12 public $cpu ='麒麟970'; 13 public $memory = "640G"; 14 public function favarit(){ 15 echo '上网'; 16 } 17 public function play(){ 18 echo '神秘星球'; 19 } 20 public function pragram(){ 21 echo '编程网页'; 22 } 23 } 24 // 调用:想要调用,首先需要进行实例化 ,这里和js有点类似,在js中,构造函数的调用,也需要进行实例化,然后才能调用 25 // 实例化对象:对象名 = new 类名() 26 $shili = new MobilePone(); 27 // 然后是调用 28 // 调用方法:对象->方法名 29 $shili->play(); 30 echo '<br>'; // 这里是换行 31 $shili->favarit(); 32 echo '<br>'; // 这里是换行 33 $shili->pragram(); 34 echo '<br>'; 35 //调用属性: 对象->属性名称[注意,属性名前面不需要美元符号] 36 echo $shili->cpu; 37 echo '<br>'; 38 echo $shili->memory; 39 ?>
运行结果:
2.2 类中的修饰符(权限控制符)
1 <?php 2 //Object.defineProperty 3 header("Content-type: text/html; charset=utf-8"); 4 class Computer { 5 //public: 属性修饰符: 用来控制 属性/方法 的访问权限 6 /* 7 常见的属性修饰符用3个: 8 public( 公共的 ) 9 protected: 受保护的( 继承里面讲 ) 10 private: 私有的 11 */ 12 13 //类的外面: 类的定义中 {} 的外面 14 //类的里面: 类的定义中 {} 的里面 15 public $keyboard = '键盘'; //public: 在类的外面 和 类的里面 都能够访问 16 public $mouse = '鼠标'; 17 private $cpu = '64核 麒麟975'; //private: 只能在类的内部才能访问 18 public function showInfo(){ 19 //this: 哪个对象调用我,我就指向谁 20 // '.'号:在php中,用于字符串的链接,相当于js中的'+'号 21 echo $this->cpu . '--->' . $this->mouse . '--->' . $this->keyboard; 22 } 23 } 24 $c = new Computer(); 25 $c->showInfo(); 26 ?>
2.3 在类外是不能够访问私有属性的(即private 作为修饰符的部分,只能在类内部访问)
1 <?php 2 //Object.defineProperty 3 header("Content-type: text/html; charset=utf-8"); 4 class Computer { 5 //public: 属性修饰符: 用来控制 属性/方法 的访问权限 6 /* 7 常见的属性修饰符用3个: 8 public( 公共的 ) 9 protected: 受保护的( 继承里面讲 ) 10 private: 私有的 11 */ 12 13 //类的外面: 类的定义中 {} 的外面 14 //类的里面: 类的定义中 {} 的里面 15 public $keyboard = '键盘'; //public: 在类的外面 和 类的里面 都能够访问 16 public $mouse = '鼠标'; 17 private $cpu = '64核 麒麟975'; //private: 只能在类的内部才能访问 18 19 public function showInfo(){ 20 //this: 哪个对象调用我,我就指向谁 21 // '.'号:在php中,用于字符串的链接,相当于js中的'+'号 22 echo $this->cpu . '--->' . $this->mouse . '--->' . $this->keyboard.'<br>'; 23 } 24 } 25 26 $c = new Computer(); 27 $c->showInfo(); 28 29 echo $c->keyboard.'<br>'; 30 echo $c->mouse.'<br>'; 31 echo $c->cpu.'<br>'; //报错, 在类的外面 不能访问私有的属性 32 33 ?>
2.4 类外也不能访问受保护的属性(即用protected 修饰的属性)
1 <?php 2 //Object.defineProperty 3 header("Content-type: text/html; charset=utf-8"); 4 class Computer { 5 //public: 属性修饰符: 用来控制 属性/方法 的访问权限 6 /* 7 常见的属性修饰符用3个: 8 public( 公共的 ) 9 protected: 受保护的( 继承里面讲 ) 10 private: 私有的 11 */ 12 13 //类的外面: 类的定义中 {} 的外面 14 //类的里面: 类的定义中 {} 的里面 15 public $keyboard = '键盘'; //public: 在类的外面 和 类的里面 都能够访问 16 public $mouse = '鼠标'; 17 private $cpu = '64核 麒麟975'; //private: 只能在类的内部才能访问 18 protected $aaa = '这是受保护的属性'; 19 public function showInfo(){ 20 //this: 哪个对象调用我,我就指向谁 21 // '.'号:在php中,用于字符串的链接,相当于js中的'+'号 22 echo $this->cpu . '--->' . $this->mouse . '--->' . $this->keyboard.'--->'.$this->aaa.'<br>'; 23 } 24 } 25 $c = new Computer(); 26 $c->showInfo(); 27 28 echo $c->keyboard.'<br>'; 29 echo $c->mouse.'<br>'; 30 echo $c->aaa.'<br>';//报错, 在类的外面 不能访问受保护的属性 31 32 ?>
3. 构造函数 __construct():函数在实例化的时候,就会调用构造函数
<?php /* 构造函数: 1, 定义的时候, 他的函数名 __construct php4 构造函数名是跟类同名 2, 构造函数 不需要手动去调用, 自动被调用 3, 当对象实例化的时候, 构造函数会被自动调用 */ header("Content-type: text/html; charset=utf-8"); class Person{ public $name; public $sex; public function __construct($n,$s){ echo '如果此段文字被输出了,说明实例化类的时候会调用__construct()函数'.'<br>'; $this->name = $n; $this->sex = $s; } } $p1 = new Person('huanying2015','man'); $p2 = new Person('aluoha','man'); ?>
4. 继承:
继承1:父类所有的public修饰的属性和方法;继承2:父类所有的protected 修饰的属性和方法
类的继承格式:
class 类名 extends 父类名{}
<?php header("Content-type: text/html; charset=utf-8"); class Person { public $name; public $age; public function __construct( $n, $a ){ $this->name = $n; $this->age = $a; echo '父类实例化'.'<br>'; } public function speak(){ echo '说话<br/>'.'<br>'; } protected function eat(){ echo '吃饭<br/>'.'<br>'; } private function waimao (){ echo '长相<br/>'.'<br>'; } } //class 类名 extends 父类名 /* 继承 到底 继承了什么? 1,父类所有的public的属性和方法 2, 父类所有的protected的属性和方法 3, private的属性和方法 不会继承过来 public: 类内,类外,子类 可以访问 protected: 类内,子类 可以访问 private: 类内 可以访问 */ class Student extends Person{ public $No; // 扩展构造函数 // public function __construct($n,$a,$no){ // echo '子类实例化'.'<br>'; // //parent:父类 // parent::__construct($n,$a); // 调用父类的方法:构造函数 // $this->No = $no; // 把自己扩展的属性也加上去,这样自己的构造函数就完整了 // } // 也可以重写构造函数 public function __construct($n,$a,$no){ echo '子类实例化'.'<br>'; $this->name = $n; $this->age = $a; $this->No = $no; } // 如果不满意父类的方法,可以重写父类的方法,改写完成后,对父类不会造成影响 public function speak(){ echo '我是一名学生,说的是学生话'.'<br>'; } // 父类没有的类,可以在这里进行扩展,添加新类 public function test(){ echo '我的学号是:'.$this->No.'学生正在考试'.'<br>'; $this->eat(); //protected 修饰的方法:能够被子类继承,所以此处可以被访问 $this->waimao(); //pravite 修饰的方法:不能够被子类继承,所以此处是访问不到的,会报错 } } $p = new Person( '周星星', 23 ); // 父类实例化 $p->speak(); // 父类方法调用 $stu = new Student('光头强', 22, '2342343' ); // 子类实例化 $stu->speak(); // 子类方法调用,这里是调用重写后的方法 $stu->test(); // 子类调用扩展的方法 ?>
小结:修饰符的说明:
public:类外可以调用,类内可以调用,可以继承
protected:类外不可以调用,类内可以调用,可以继承
private:类外不可以调用,类内可以调用,不可以继承