zoukankan      html  css  js  c++  java
  • 前端小白之每天学习记录----php(6)面向对象

    php面向对象
    类:
    一类共性事物的抽象
    比如:

           eg:车子

    共性:类的共性

           eg:轮子、能动

    对象:
            类造出来的

            eg:自行车, 滑板车, 小汽车, 卡车, 

    对象才是具体的产品,才能使用功能

    1.php新建一个类,并实例化(实例化指的是用类新造一个对象):

    定义方法:class 类名称 {} 

    public: 属性修饰符: 用来控制 属性/方法 的访问权限

    实例化对象:对象名 = new 类名();

    <?php
        /*
            定义一个类
            class 类名称 {
    
            }
            类是由n个属性和方法组成的
         eg:定义一个类:电脑 */
    class Computer { //public: 属性修饰符: 用来控制 属性/方法 的访问权限 public $cpu = 'i5四核'; public $memory = '88G'; public function surf(){ echo '上网'; } public function play(){ echo '播放电影'; } public function program(){ echo '编程'; } } //实例化对象:对象名 = new 类名(); $c = new Computer(); //调用类的方法: 对象->方法名 $c->play(); //播放影片 echo '<br/>'; //读取对象的属性 对象->属性名[注意, 属性前面不需要美元符号] echo $c->cpu; //i5四核 ?>

    2.属性修饰符与this

    常见的属性修饰符用3个:
    public( 公共的 )
    protected: 受保护的
    private: 私有的( 继承里面讲 )

    this:

     哪个对象调用我,我就指向谁

        //Object.defineProperty
        class Computer {
            //public: 属性修饰符: 用来控制 属性/方法 的访问权限
            /*
                常见的属性修饰符用3个:
                    public( 公共的 )
                    protected: 受保护的( 继承里面讲 )
                    private: 私有的
            */
    
            //类的外面: 类的定义中 {} 的外面
            //类的里面:   类的定义中 {} 的里面
            public $keyboard = '键盘'; //public: 在类的外面 和 类的里面 都能够访问
            public $mouse = '鼠标';
            private $cpu = '4核i5'; //private: 只能在类的内部才能访问
    
            public function showInfo(){
                //this: 哪个对象调用我,我就指向谁
                echo $this->cpu . '--' . $this->mouse . '---' . $this->keyboard;
            }
        }
    
        $c = new Computer();
        $c->showInfo();// 
        // echo $c->cpu; //报错, 在类的外面 不能访问私有的属性
        // echo $c->keyboard;
        // echo $c->mouse;
    

    3.构造函数

    <?php
       /*
            构造函数:
                1, 定义的时候, 他的函数名: __construct
                2,php4 构造函数名是跟类同名
                3, 构造函数 不需要手动去调用, 自动被调用
                  当对象实例化的时候, 构造函数会被自动调用
       */ 
        class Person{
            public $name;
            public $sex;
            public function __construct( $n, $s ){
                echo '我会自动调用';
                $this->name = $n;
                $this->sex = $s;
            }
        }
    
        $p = new Person( 'zhangsan', 'man' );//自动调用
        $p2 = new Person( 'lisi', 'man' );
    
    
    
    ?>
    

    4.继承

    定义子类的方法:class 子类名 extends 父类名{}
    继承 到底 继承了什么?
    1, 父类所有的public的属性和方法
    2, 父类所有的protected的属性和方法
    3, private的属性和方法 不会继承过来

    public: 类内,类外,子类 可以访问
    protected: 类内,子类的类内 可以访问
    private: 类内 可以访问
    <meta charset="UTF-8">
    <?php
    
        class Person {
            public $name;
            public $age;
    
            public function __construct( $n, $a ){
                $this->name = $n;
                $this->age = $a;
            } 
    
            public function speak(){
                echo '说话<br/>';
            }
    
            protected function eat(){
                echo '吃饭<br/>';
            }
    
            private function waimao (){
                echo '长相<br/>';
            }
        }
    
        //class 类名 extends 父类名
        /*
            继承 到底 继承了什么?
                1,父类所有的public的属性和方法
                2, 父类所有的protected的属性和方法
                3, private的属性和方法 不会继承过来
    
            public: 类内,类外,子类 可以访问
            protected: 类内,子类 可以访问
            private: 类内 可以访问
    
        */
        class Student extends Person{
         //增加内容 public $No;
    //扩展构造函数 public function __construct( $n, $a, $no ){ //parent:父类 parent::__construct( $n, $a ); //调用父类的构造函数 $this->No = $no;//构造函数新扩展的内容 } //重写构造函数 // public function __construct( $n, $a, $no ){ // $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(); //private修饰的方法/属性 不能被继承 } } $p = new Person( '小强', 20 ); $p->speak(); $stu = new Student('大强', 22, '2342343' ); $stu->speak(); $stu->test(); // $stu->eat();//报错 protected的方法 能够被子类继承, 但是不能在类的外部访问 // $stu->waimao();//报错 private修饰的方法/属性 不能被继承 更不能在类外访问 ?>

    5.用类封装(数据库连接,数据库curd操作)

    在封装前先了解一下需要用到的php的array知识

        array1:[ ] :空索引(当索引为空时,默认为该数组原最大索引加1)

    <?php
    
        $user = array();
        // $user[0] = 'zhangsan';
        // $user[2] = 'zhangsan';
    
        // //[] 是在该数组 最大的数字索引上+1
        // $user[] = 'zhangsan';
        // $user[8] = 'zhangsan';
        // $user[] = 'zhangsan';
    
    
        $user[] = '张三';
        $user[] = 'lisi';
        $user[] = 'wangwu';
    
        // print_r( $user );//Array ( [0] => 张三 [1] => lisi [2] => wangwu )
        // echo $user;
    
    ?>
    

      array2:array_values与array_values与implode

        1.数组名_values:把数组的值取出来保存在一个数组里面然后返回

        2.数组名_keys:把数组的键取出来保存在一个数组里面然后返回

        3.implode:把数组中的所有元素放入一个字符串。(相当于js的join)

    <?php
    
    $user = array(
        'title' => '星星',
        'content' => '小星星',
        'age' => 22
    );
        // print_r( array_keys( $user ) );//
        // $keys = array_keys( $user );
        //implode--->join
        // echo implode( ",", $keys );
    
    
        $values = array_values( $user );
    	print_r($user);
    	echo "</br>";
         print_r( $values );
    //    echo implode( "','", $values ); //星星,小星星,22
    ?>
    

      array3:foreach用来遍历array,count($array)用来获取array的长度(键值对的数量)

          foreach用法:foreach(遍历对象  as 键 => 值 ){每次遍历执行的函数}

        <meta charset="UTF-8">
        <?php
    
        $userList = array(
            0 => array(
                '张三',
                '李四',
            ),
            1 => array(
                '小星星',
                '小强强'
            )
        );
    
        // foreach( $userList as $k => $v ){
        //     echo $k . '--->' . $v[0] . '--->' . $v[1] . '<br/>';
        // }
    
        foreach( $userList as $key => $val ){
            // echo $k . '--->';
            echo $key;
            foreach( $val as $k2 => $v2 ){
                echo '---->' . $v2;
            }
            echo '<br/>';
        }
        //  $arr = array(
        //      0 => 1,
        //      3 => 10,
        //      5 => 100,
        //  );
    
    //     foreach( $arr as $key => $val ){
    //     foreach( $arr as $k => $v ){
    //         echo $key . '-->' . $val . '<br/>';
    //         echo $val . '<br/>';
    //         echo $v . '<br/>';
    //     }
    
    //     foreach( $arr as $val ){
    //         echo $val . '<br/>';    
    //     }
    
    
        //  echo count($arr); //3
    
        //$i---> 0, 1, 2 
        //for循环的缺点:不能遍历 不连续的数字索引 和 字符串索引
        // for( $i = 0; $i < count( $arr ); $i++ ){
            // $arr[0] $arr[1] $arr[2]
        //     echo $arr[$i] . '<br/>';
        // }
    
    
    ?>
    

    封装数据库连接,数据库curd操作(新建mysql.class.php)

    测试时需要新建数据库sxlxb,表message,列名(msg_id,title,content)

    <meta charset="UTF-8">
    <?php
        class Mysql {
            private $host; //主机名
            private $dbName; //数据库名称
            private $userName; //用户名
            private $userPWd; //密码
    
            public function __construct( $_host, $_dbName, $_userName, $_userPwd ){
                $this->host = $_host;
                $this->dbName = $_dbName;
                $this->userName = $_userName;
                $this->userPwd = $_userPwd;
                if( !$this->connect() ){
                    die( mysql_error() );
                }
                // else{echo "connect is ok";}//测试数据库是否连接成功
                //设置编码
                $this->setCode();
                //选择数据库
                $this->selectDb();
            }
    
            public function connect(){
                return mysql_connect( $this->host, $this->userName, $this->userPwd );
            }
    
            public function setCode(){
                $this->query( "set names utf8" );
            }
            
            public function selectDb(){
                mysql_select_db( $this->dbName );
            }
    
            public function query( $sql ){  //执行语句
                return mysql_query( $sql );
            }
    
            //用来查询所有的数据
            public function getAll( $sql ){
                $res = $this->query( $sql );//返回资源
                $list = array();
                while( $row = mysql_fetch_assoc( $res ) ){//遍历出每一行资源
                    // array_push( $list, $row );
                    $list[] = $row;
                }
                return $list;
            }
    
            //查询一行数据
            public function getRow( $sql ){
                $res = $this->query( $sql );
                return mysql_fetch_assoc( $res );
            }
    
            //查询某一列的个数
            public function getCol( $sql ){
                $res = $this->query( $sql );
                $row = mysql_fetch_row( $res );
                return $row[0];
            }
    
            //插入
            // INSERT INTO message( title, content ) VALUES ( '星星', '小星星' );
            // 产品经理 ----> 痛点
            /*
                add( array(
                    'title' => '星星',
                    'content' => '小星星'
                ), 'message' );
            */
            public function add( $data, $tbName ){
                $sql = "INSERT INTO {$tbName}("; //insert into message (
                $sql .= implode( ',', array_keys( $data ) ) . " ) VALUES ( '";
                $sql .= implode( "','", array_values( $data ) ) . "')";
                // echo $sql;
                return $this->query( $sql );
            }
    
            // UPDATE message SET title = 'hello', content = '你好' WHERE msg_id = 1
            public function update( $data, $tbName, $condition ){
                $sql = "UPDATE {$tbName} SET ";
                foreach( $data as $k => $v ){
                    $sql .= $k . ' = ' . "'$v',";
                }
                // UPDATE message SET title = 'hello', content = '你好',
                $sql = substr( $sql, 0, -1 ); 
                $sql .= " " . $condition;
                return $this->query( $sql );
            }
    
    
        }
    
    
        $mysql = new Mysql( "localhost", "sxlxb", "root", "root" );
        // $list = $mysql->getAll( "SELECT * FROM message" );
        // $list = $mysql->getAll( "SELECT title FROM message" );
        // print_r( $list );
        // $msgDetail = $mysql->getRow( "SELECT * FROM message WHERE msg_id = 2" );
        // print_r( $msgDetail );
    
        // $total = $mysql->getCol( " SELECT COUNT(msg_id) as total FROM message;" );
        // echo $total;
    
        // $res = $mysql->add( array(
        //     'title' => '简化的插入',
        //     'content' => '现在插入数据非常舒服'
        // ), 'message');
    
        // $res = $mysql->update( array(
        //     'title' => '简化的修改',
        //     'content' => '现在修改数据非常舒服'
        // ), 'message', 'WHERE user_id = 8' );
        // echo $res
        // echo ( $res !== false ) ? 'update is ok' : 'error';
    ?>
    

      

  • 相关阅读:
    Google-Hack
    DnsLog盲注
    utf-8编码转换问题
    sql注入 无列名注入
    Python正则
    变形--缩放 scale()
    变形--扭曲 skew()
    变形--旋转 rotate()
    Css3中的变形与动画
    关于伪类元素:before和:after
  • 原文地址:https://www.cnblogs.com/szlxb/p/7340869.html
Copyright © 2011-2022 走看看