php_07_類/對象相關操作

1.php正則

<?php
    //判斷字符串的格式
    //匹配字符串的一種語法
    //PHP正則方法
    //參數1:正則表達式
    //參數2:要檢查的字符串
    //參數3:接收結果的數組(可以省略)
    //如果參數3省略,最後方法的返回值爲true/false
    //如果匹配成功,則返回true
    header("content-type:text/html;charset=utf-8");
    $str = "[email protected]";
    //^開頭
    //[]裏面任意字符
    //+ 匹配前面表達式一次或多次
    //$ 結尾
    // /i不區分大小寫

    $pattern ="/^([0-9A-Za-z-_.]+)@([0-9a-z]+.[a-z]{2,3})$/";
    $result =  preg_match($pattern, $str);
    //http://www.cnblogs.com/kevin-yuan/archive/2012/09/25/2702167.html
    if($result){
        echo "驗證成功";
    }else{
        echo "驗證失敗";
    }
    //黑客找到你的接口地址,可以跳過你的JS驗證,直接向你的PHP文件發送數據,
    //如果php不驗證,直接存入數據庫,是非常危險的,所以在php這邊還需要驗證一次

    //JS獲取你的電腦上的時間進行判斷,你可以修改電腦的時間,影響JS的判斷(比如掛:永遠不過期)

    //記住:前端的時間,必須是從服務器上獲取的
?>

2.類

<?php
    header("content-type:text/html;charset=utf-8");
    class Person{
        public $name; //成員屬性
        function eat(){//成員方法
            return "正在吃飯";
        }
    }
    //用類創建對象
    $lisi = new Person();
    $lisi -> name = "李四";//訪問成員屬性或者方法
    echo $lisi->name.$lisi->eat();
?>

3.類中的$this

<?php
    header("content-type:text/html;charset=utf-8");
    // 類中的$this關鍵字:用來訪問當前類中的對象屬性/方法。
    // $this 一般用於類中
    class Person{
        public $name; 
        public $sex;
        function eat(){
            return $this->name."正在吃飯。性別".$this->sex;
        }
    }

    $lisi = new Person();
    $lisi -> name = "李四";
    $lisi -> sex = "boy";
    echo $lisi->eat();
?>

4.類的初始化

<?php
    header("content-type:text/html;charset=utf-8");
    class Person{
        public $name; 
        public $age;
        public $color;
        //系統函數
        //在新建對象的時候,初始化對象的屬性
        function __construct($n, $a, $c){
            $this->name = $n;
            $this->age = $a;
            $this->color = $c;
        }

        function info(){
            return $this->color."顏色的人,今年".$this->age."歲,他的名字是:".$this->name;
        }
    }
    $lisi = new Person("李四",18,"黃皮膚");
    echo  $lisi->info();
?>

4.舉例

<?php
    // 面向對象
    header("content-type:text/html;charset=utf-8");
    class Person{
        public $name;
        public $clo;
        public $shoe;
        public $target; // 目的地
        // 可以給參數默認的值
        function __construct($n, $c, $s, $m="杭州")
        {
            $this->name = $n;
            $this->clo = $c;
            $this->shoe = $s;
            $this->target = $m;
        }

        function goOut () { // 出門
            return $this->name . "穿着" . $this->clo . "踏着" . $this->shoe . "出門了";
        }
        function setM () { // 決定目的地
            return "到達" . $this->target . "可以開心的玩耍了";
        }
        function buyT () { // 買票
            return $this->name . "買了一張單程票, 而且是站票";
        }
        function play () { // 出去玩
            return $this->goOut() . $this->buyT() . $this->setM();
        }
    }

    $a = new Person("李明", "女裝", "高跟鞋", "非洲");
    echo $a->play();

    echo '<br>';

    $b = new Person("ZZZ", "裙子", "趿拉板", "南極");
    echo $b->play();

?>

5.析構函數

<?php
    header("content-type:text/html;charset=utf-8");
    class Person{
        //在這個類創建的對象被釋放時自動調用的方法,稱爲析構函數
        //垃圾回收機制,後進先出
        //後進先出:後創建的先被釋放
        public $name;
        public $age;
        function __destruct(){
            echo $this->name;
            $this->name = null;
            $this->age = null;
            //在釋放的最後一刻,把指向的那塊內存空間數據置爲null
        }
    }

    //如果讓先創建的對象先釋放,需要把對象置空
    $a = new Person();
    $a->name = "李四";
    $a = null;
    $b= new Person();
    $b->name = "李四1";
    $b = null;
    $c = new Person();
    $c->name = "李四2";
?>
<!--
    釋放:
    PHP裏有個 垃圾回收機制
    當系統判斷你這個對象,已經不適用的時候,
    會把這個對象所佔的內存空間,進行回收。
    這個回收的動作稱爲釋放
-->

6.封裝

<?php
    //封裝:
    //把一些相關的屬性和方法的代碼隱藏在方法中,
    //可以讓代碼重複使用

    //public  表示全局,類內部,子類可以訪問被這個修飾的變量
    //protected 表示受保護的屬性,外部無法訪問
    //表示私有的屬性/方法,只有本類內部可以使用,子類或者外部無法訪問
    class Person{
        public $name;
        protected $age;
        private function say(){
            return $this->age;         
        }
    }

    $a = new Person();
    $a->name = "lisi";
?>

7.get_set

<?php
    header("content-type:text/html;charset=utf-8");
    class Person{
        public $na;
        private $weight;
        private $age;
        protected $d = 50;
        function __construct($n, $w = 100,$age =18){
            $this->na = $n;
            $this->weight =$w;
            $this->age = $age;
        }       

        function __get($name){
            return $this->$name;
        }

        //訪問類的成員屬性,並且賦予值
        function __set($name, $value){
            //如果成員屬性,設置成受保護的或者私有的,可以在set方法,進行判斷阻攔,
            //如果你不想讓值被更改,可以在這裏進行if判斷
            if($name == "d"){
                return;
            }else{
                $this->$name = $value;
            }
        }
    }

    $n = new Person("李四");
    //直接訪問屬性,會自動調用get方法
    //如果訪問的是私有屬性,類裏沒有自己實現get方法,則會報錯
    //echo $n->age;
    //echo $n->weight;

    //echo $n->age = 20; //訪問類的私有屬性並賦值
    $n->d = 100;
    echo  $n->d;
?>

8.繼承

<?php
    //父類:被繼承  子類:繼承
    class Person{
        public $name;
        protected $age;
        private $sex;
        function sayHello(){
            echo "123";
        }
    }

    class Man extends  Person{
        public $hou;
        function ex(){
            echo $this->name.$this->age;
        }   
    }
    //php的繼承:共享被繼承類裏的內容;且只能單一繼承
    $fuPer = new Person();
    $fuPer->name = "李";

    $cPer = new Man();
    echo $cPer->sayHello();
    //子類繼承父類裏屬性和方法
    //父類裏的私有東西無法被繼承過來

?>

9.重載

<?php
    class Person{
        public $name;
        function sayHello(){
            echo "001";
        }

        function c($a){
            echo "father";
        }
    }

    class Girl extends Person{
        //重寫:實現父類相同的屬性或者方法,就是重載
        function sayHello(){
            //手動調用父類的方法屬性
            Person::sayHello();
            echo "002";
        }

        function c(){
            $arg = func_get_arg($arg_num);
            var_dump($arg);

            echo "child";
        }
    }

    $a = new Girl();
    //echo $a->sayHello();
    echo $a->c();

    //重寫:2個方法名完全一樣,參數個數相同
    //重載:2個方法名一樣,但是採納數個數不同
    //(注意PHP沒有直接實現重載的方式,只能通過判斷參數的個數,
    //然後利用類::方法(傳參)調用父類方法)

?>

sql

<?php

   SQL語句:就是對數據庫進行操作的一種語言。
         我們可以使用後臺編程語言 執行SQL語句, 對數據庫進行操作.

         查詢:
         SELECT * FROM student
         * 你要查詢的字段, *代表所有
         意思: 查詢student表裏的所有字段以及值

         SELECT gradeclass, age, name FROM student
         可以指定你要查詢的字段

         條件查詢:

         1.單個字段條件:
         SELECT * FROM student WHERE sex = "女"
         條件在表名後面, 使用WHERE
         WHERE後面設置條件

         2.AND查詢條件
         SELECT * FROM student WHERE sex = "女" AND name = "小花"
         必須同時滿足我們WHERE後面的條件
         AND 就是並且的意思, 可以寫多個

         3.OR查詢條件
         SELECT * FROM student WHERE name = "李明" OR age = 21
         只要滿足OR任意一邊的條件, 都可以

         4.模糊查詢條件
         SELECT * FROM student WHERE name LIKE "李%"

         % 代表0個或多個字符
         _ 代表一個字符

         %計%  這種查詢條件, 只要帶計就可以.

         5.排序
         SELECT * FROM student ORDER BY age DESC
         ASC: 遞增 (默認)
         DESC: 遞減
         ORDER BY 字段(根據某個字段進行排序)

        6.count() 統計函數, 統計一共有多少條數據

        分組查詢每個年齡段各有多少人
        SELECT count(*),age FROM studentgroup by age  

        統計姓李的一共有多少人
        SELECT count(*),name FROM student WHERE name like '李%'

        左鏈接 以左邊的表爲參照,以on後面的爲條件,去右面的表裏一一查詢數據並顯示出來
        select * from student left join sc on student.sno = sc.sno
           右鏈接
        select * from student right join sc on student.sno = sc.sno
           全鏈接  必須左右兩面的sno 都存在的情況下,才取出數據
        select * from student inner join sc on student.sno = sc.sno   

        查詢每個學科有多少人選修
        select count(*),study.cno from study left join sc on study.cno = sc.cno group by study.cno
        查詢每個學科的平均成績
        select study.cname,max(grade) as "最大值",min(grade),sum(grade),avg(sc.grade) from study left join sc on study.cno = sc.cno group by study.cname

        limit
        分頁公式
        SELECT * FROM student   limit 0,2
        0: 從那個位置開始,查詢出來的數據從0開始索引
        2: 個數
        05
        55
        105
        155

        pageCount 表示當前是第幾頁
        pageNum 表示每頁幾條數據
        SELECT * FROM student limit (pageCount - 1) * pageNum ,pageNum

        主鍵:不允許爲空,值唯一,一般用於表示一條數據的獨特性(身份證號)
        ----------------------華麗分割線---------------------------------
        1.增加數據的sql
        INSERT INTO student(sno, name, sex, age, gradeclass) VALUES ('','王明','男',18,'計算機')
        注意:字段的順序和值的順序一樣要一一對應的關係,
        字段可以不寫全,比如我不想給年齡,就不需要些age
        2.修改的sql
        更新表
        注意:如果沒有條件,則更新的是所有的這個字段的值
        update student set name = '李四' where student.sno = 1
        update student set age = age + 1
        3.刪除sql
        deldete from student where name = '張三'
        注意 如果不給條件,則刪除這個表裏的所有數據
?>
發佈了57 篇原創文章 · 獲贊 16 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章