1. 程式人生 > >前端小白之每天學習記錄----php(6)面向對象

前端小白之每天學習記錄----php(6)面向對象

prop 封裝數據 ima 影片 最大的 const object 經理 符號

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‘;
?>

  

前端小白之每天學習記錄----php(6)面向對象