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:类外不可以调用,类内可以调用,不可以继承

 

posted on 2018-01-31 13:14  huanying2015  阅读(111)  评论(0编辑  收藏  举报