<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## **echo、print、print_r、var_dump 區別** `echo`和`print`是語言結構、`print_r`和`var_dump`是普通函數。 * **echo**:輸出一個或多個字符串 * **print**:輸出字符串 * **print_r**:打印關于變量的易于理解的信息 * **var_dump**:打印關于變量的易于理解的信息(帶類型) ## **單引號和雙引號的區別** 雙引號可以被分析器解析,單引號不行。 ## **isset 和 empty 的區別** * **isset**:檢測變量是否已設置并且不為 Null * **empty**:判斷變量是否為空。 以下全部認為是空的: * "" (空字符串) * 0 (作為整數的0) * 0.0 (作為浮點數的0) * "0" (作為字符串的0) * null * false * array() (一個空數組) * $var; (一個聲明了,但是沒有值的變量) ## **static、self、$this的區別** * static:可以用于靜態或者非靜態方法中,也可以訪問類的靜態屬性,靜態方法,常量和非靜態方法,但不能訪問非靜態屬性 * self:可以用于訪問類的靜態屬性,靜態方法和常量,但self 指向的是當前定義所在的類,這是 self 的限制。 * $this:指向的是實際調用時的對象。實際運行過程中,誰調用了類的屬性或方法,$this 指向哪個對象。但 $this 不能訪問類的靜態屬性和常量,且 $this 不能存在于靜態方法中 ## **include、require、include_once、require_once 的區別** `include` 表達式包含并運行指定文件。 `require` 和 `include` 幾乎完全一樣,除了處理失敗的方式不同。 `require` 在出錯是產生 **E_COMPILE_ERROR** 級別的錯誤,將導致腳本終止。`include`產生警告(**E_WARNIMG**),腳本繼續運行。 `include_once` 和 `include` 語句類似,唯一區別是如果該文件中已經被包含過,則不會再次包含,且 `include_once` 會返回 true。 顧名思義,`require_once`,文件僅僅包含(`require`)一次。 ## **Cookie 和 Session** Cookie:PHP 透明的支持 HTTP cookie。 cookie 是一種遠程瀏覽器端存儲數據并以此來跟蹤和識別用戶的機制 Session:會話機制(session)在 PHP 中用于保持用戶連續訪問web應用時的相關數據 ## **魔術方法** * `__construct()` - 在每次創建新對象時先調用此方法 * `__destruct()` - 在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行 * `__call()` - 在對象中調用一個不可訪問方法時被調用 * `__callStatic()` - 在靜態上下文中調用一個不可訪問方法時被調用 * `__get()` - 讀取不可訪問(protected 或 private)或不存在的屬性的值時被調用 * `__set()` - 在給不可訪問(protected 或 private)或不存在的屬性賦值時被調用 * `__isset()` - 當對不可訪問(protected 或 private)或不存在的屬性調用 `isset()` 或 `empty()` 時被調用 * ` __unset()` - 當對不可訪問(protected 或 private)或不存在的屬性調用 `unset()` 時被調用 * `__sleep()` - `serialize() `函數會檢查類中是否存在一個魔術方法 `__sleep()`。如果存在,該方法會先被調用 * `__wakeup()` - `unserialize()` 會檢查是否存在一個 `__wakeup()` 方法。如果存在,該方法會先被調用 * `__toString()` - 一個類被當成字符串時的回應 * `__invoke() ` - 當嘗試以調用函數的方式調用一個對象時被調用 > 除了 `__construct()`, `__destruct()` ,和 `__clone()` 之外的所有魔術方法都 必須 聲明為 **public**, 否則會發出 **E_WARNING** ## **public、protected、private、final 區別** 對屬性或方法的訪問控制,是通過在前面添加關鍵字 **public(公有)**,**protected(受保護)**或 **private(私有)**來實現的。被定義為公有的類成員可以在任何地方被訪問。 PHP 5 新增了一個 **final** 關鍵字。**如果父類中的方法被聲明為 final,則子類無法覆蓋該方法。如果一個類被聲明為 final,則不能被繼承** ## **類的靜態調用和實例化調用** * 占用內存 靜態方法在內存中只有一份,無論調用多少次,都是共用的 實例化不一樣,每一個實例化是一個對象,在內存中是多個的 * 不同點 靜態調用不需要實例化即可調用 靜態方法不能調用非靜態屬性,因為非靜態屬性需要實例化后,存放在對象里 靜態方法可以調用非靜態方法,使用 `self `關鍵字。**php 里,一個方法被 `self::` 后,自動轉變為靜態方法** 調用類的靜態函數時不會自動調用類的構造函數 ## **接口和抽象的區別** 抽象用于描述不同的事物,接口用于描述事物的行為。 ## **PHP 與 MySQL 連接的幾種方式** ### **MySQLi** ```php // 創建一個連接誒 $conn = new mysqli('127.0.0.1:3306', 'root', '123456'); // 檢查連接 if ($conn->connect_errno) { die($conn->connect_error . "\n"); } $conn->query("set names 'utf8';"); // 選擇用于數據庫查詢的默認數據庫 $select_db = $conn->select_db('user'); if (!$select_db) { die($conn->error . "\n"); } // 執行查詢 $sql = "SELECT * FROM `user` LIMIT 1"; $res = $conn->query($sql); if (!$res) { die($conn->error . "\n"); } while ($row = $res->fetch_assoc()) { var_dump($row); } $res->free(); // 關閉連接 $conn->close(); ``` ### **PDO** ```php $pdo = new PDO('mysql:host=127.0.0.1:3306;dbname=user', 'root', '123456'); $pdo->exec("set names 'utf8'"); $sql = "SELECT * FROM `user` LIMIT 1"; $stmt = $pdo->prepare($sql); $stmt->bindValue(1, 1, PDO::PARAM_STR); $rs = $stmt->execute(); if ($rs) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { var_dump($row); } } $pdo = null; ``` ### **MySQLi、PDO 區別** 1. **連接** ~~~php // PDO $pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); // mysqli, procedural way $mysqli = mysqli_connect('localhost','username','password','database'); // mysqli, object oriented way $mysqli = new mysqli('localhost','username','password','database'); ~~~ 2. **API支持** PDO 和 MySQL i都是通過面向對象的形式提供 API,但是同時**MySQLi也提供了面向過程的API**,這種形式對于新手來說更容易理解 3. **數據塊支持** PDO比MySQLi最大的優點就是**PDO支持很多種數據庫**,而MySQLi只支持MySQLi。 4. **命名參數支持** * PDO 參數綁定 ~~~php $params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600); $pdo->prepare(' SELECT * FROM users WHERE username = :username AND email = :email AND last_login > :last_login'); $pdo->execute($params); ~~~ * MySQLi 參數綁定 ~~~ $query = $mysqli->prepare(' SELECT * FROM users WHERE username = ? AND email = ? AND last_login > ?'); $query->bind_param('sss', 'test', $mail, time() - 3600); $query->execute(); ~~~ PDO是通過命名參數進行值的綁定,而MySQLi的參數綁定是通過點位符“?”并嚴格按這個問號的順序來綁定值。 5. **對象映射(Object Mapping)** 基于數據庫的開發一般都是從數據庫中讀取數據然后把這些數據用一個對象來承載。**PDO和MySQLi都支持對象映射** 6. **安全性** 二者**都可以防止sql注入** 7. **性能** 由于PDO能夠支持其它非MySQL的數據庫,而MySQLi專門針對MySQL設計的,所以MySQLi相對于PDO性能稍微好一些。 ## **PHP 代碼執行過程** PHP 代碼 => 啟動 php 及 Zend 引擎,加載注冊拓展模塊 => 對代碼進行詞法/語法分析 => 編譯成opcode(opcache) => 執行 opcode ## **主流 PHP 框架特點** ### Laravel 易于訪問,功能強大,并提供大型,強大的應用程序所需的工具 - 簡單快速的路由引擎 - 強大的依賴注入容器 - 富有表現力,直觀的數據庫 ORM - 提供數據庫遷移功能 - 靈活的任務調度器 - 實時事件廣播 ### ThinkPHP - 采用容器統一管理對象 - 支持 Facade - 更易用的路由 - 注解路由支持 - 路由跨域請求支持 - 驗證類增強 - 配置和路由目錄獨立 - 取消系統常量 - 類庫別名機制 - 模型和數據庫增強 - 依賴注入完善 - 支持 PSR-3 日志規范 - 中間件支持 - 支持 Swoole/Workerman 運行 ## **串行、并行、并發的區別** * **串行**:執行多個任務時,各個任務按順序執行,完成一個之后才能進行下一個 * **并行**:多個任務在同一時刻執行 * **并發**:同一時刻需要執行多個任務 - https://github.com/colinlet/PHP-Interview-QA#php-%E7%AF%87 - http://www.hmoore.net/martist/be_new_friends/1704834
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看