# php **Repository Path**: swordying/php ## Basic Information - **Project Name**: php - **Description**: 关于PHP的代码或者文档 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-02-16 - **Last Updated**: 2023-09-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PHP 学习笔记 ## 1. 基本介绍 1. 定义:一种解释型动态脚本语言 2. 英文名:Hypertext Preprocessor 中文名:超文本预处理器 3. 创始人:Rasmus Lerdorf[拉斯姆斯·勒多夫] 4. 开发时间:1994年 上线时间:1995年 5. 设计目的:网站脚本 6. 官方网站:http://php.net 7. 文件扩展名:` .php ` ## 2. 语言特性 1. 语法简单,灵活实用 2. 语法糖多,博采众长 3. 面向对象,开发快速 ## 3. 应用场景 1. 网站开发 2. 网站开发 3. 网站开发 ## 4. 安装方法 ### 1. Windows 1. 安装集成开发环境 2. 官网下载二进制包 ### 2. macOS - 高版本 macOS 系统已不内置 PHP 1. 安装集成开发环境 2. brew 安装 ` $ brew install php ` ### 3. 进入 PHP 交互编写模式 ` $ php -a ` ## 5. PHP 注释 ```php /** * -------------------------------- * # PHP 注释 多行注释 * -------------------------------- * 1. // PHP 单行注释 * 2. # PHP 单行注释 * -------------------------------- */ ``` ## 6. PHP 变量 - 变量名规则与其他编程语言一致 ```php ## 声明变量 $var_string = "变量"; ## 变量连接 echo '可以使用 . 来连接变量' . "\$var_string = {$var_string}"; ``` ## 7. 数据结构 ### 1. 标量 1. 整型 integer 2. 浮点型 float 3. 字符串 string 4. 布尔值 boolean ### 5. 数组 Array #### 1. 简介 1. 数组 Array 无疑是 PHP 中的独特的数据结构 2. 相当于其他编程语言的数组、字典、列表、集合、元组 3. 由于 PHP 数组的使用,使编码相关需求变的容易 #### 2. 声明 ```php ## 声明 $var_array = array( '第一个值', 1 => '第二个值', 'key' => '第三个值', '键' => '第四个值', ); ## 调用并输出 echo $var_array['键']; ## 第四个值 ``` ### 6. 对象 Object 1. 类的实例化 2. 可储存多种数据结构 3. 声明方法 ```php ## 声明 $var_object = new StdClass(); ## 赋值 $var_object -> var_string = "赋值"; ## 调用,并打印 echo $var_object -> var_string; ## 赋值 ``` ### 7. 资源 Resource - 一种特殊变量,保存了到外部资源的一个引用 1. 文件的句柄 2. 网络连接的句柄 3. 数据库等连接的句柄 4. 图形画布区域的句柄 ### 8. 空值 null 1. 未声明的变量 2. 声明为空值的变量 3. 注销的变量 #### 获取变量类型 ```php $var = "变量"; $var_type = gettype($var); echo $var_type; ## string ## 变量类型取值为:integer、double、string、boolean、array、object、resource、NULL ``` ### 常用数据结构的转化 - PHP 可进行隐式转化 #### 1. 标量之间可两两随意转化 - 标量类型:int、float、string、bool ```php $var = (int) '变量前使用(变量类型)可进行转化'; var_dump($var); ## int(0) ``` #### 2. 数组与对象可以相互转化 ```php $var_array = array( '0', 1 => '1', 'key' => 'value', '键' => '值', ); $var_object = (object) $var_array; // 调用并输出 echo $var_object -> {0}; ## 0 echo "\n"; echo $var_object -> {1}; ## 1 echo "\n"; echo $var_object -> {'key'}; ## value echo "\n"; echo $var_object -> 键; ## 值 echo "\n"; ``` ## 8. 流程控制 ### 1. 判断语句 ```php $status = true; if($status === true){ echo true; }elseif($status === false){ echo false; }else{ echo 'not boolean'; } ``` ### 2. 分支语句 ```php $status = false; switch($status){ case true:{ echo 'is boolean true'; break; } case false: case null:{ echo 'is false or null'; break; } default:{ echo 'not boolean and null'; } } ## 备注:switch 匹配 case 以后,只有遇到 break,才会停止执行语句 ``` ### 3. 循环语句 #### 1. while 循环 ```php $i = 0; while(true){ echo "{$i}:计数到 10 则停止\n"; if($i == 10){ break; } $i++; } ``` #### 2. for 循环 ```php for($i=1; $i <= 10; $i++){ echo "当前循环了 {$i} 次\n"; } ``` ### 4. 中断语句 #### 1. break 终止当前循环 #### 2. continue 立即执行下一次循环 ## 9. 面向对象 ### 1. 面向对象特性 1. 封装:控制类的属性与方法的访问规则 2. 继承:以自身为模版创建子类 3. 多态:不同子类可以独立实现父类的同名方法 - 继承是多态的手段、多态是继承的目的 ### 2. 封装原则 1. public 2. protected 3. prevate ### 3. 代码示例 ```php class Test { public static $static_attribute = '静态属性'; public $public_attribute = '公共属性'; protected $protected_attribute = '保护属性'; private $private_attribute = '私有属性'; public static function static_function() { echo "静态方法\n"; } public function public_function() { echo "公共方法\n"; } protected function protected_function() { echo "保护方法\n"; } private function private_function() { echo "保护方法\n"; } } // 继承 class Testing extends Test { // 重写 public function public_function() { echo "重写了方法\n"; } } // 调用静态属性 echo Testing::$static_attribute; ## 静态属性 echo "\n"; // 调用静态方法 echo Testing::static_function(); ## 静态方法 // 实例化 $testing = new Testing(); // 调用公共属性 echo $testing -> public_attribute; echo "\n"; // 调用公共方法 $testing -> public_function(); ## 重写了方法 // $testing -> protected_function(); ## 被保护对象,不能在外部访问 ``` ## 11. PHP 常量 ### 1. 定义常量 ```php // 定义常量 define('PHP_DEFINE', 'php_define'); // 检查常量是否存在 $is_defined = defined('PHP_DEFINE'); echo $is_defined . "\n"; if($is_defined){ // 输出常量 echo PHP_DEFINE; } ``` ### 2. 魔术常量 1. ` __FILE__ ` 获取当前文件全路径 2. ` __DIR__ ` 获取当前文件所在目录的全路径 3. ` __FUNCTION__ ` 获取当前所在函数的名称,如果如果没有写在函数中返回空字符串 4. ` __CLASS__ ` 获取当前所在类的名称,若在类外,则返回空字符串 5. ` __METHOD__ ` 获取当前类名以及方法名 6. ` __NAMESPACE__ ` 获取当前所在的命名空间 7. ` __LINE__ ` 获取当前所在文件的行数 ## 12. 异常处理 ` try...throw...catch ` - 维护脚本的正常执行 1. try:使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。 2. throw:规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"。 3. catch:"catch" 代码块会捕获异常,并创建一个包含异常信息的对象。 ### 1. 代码示例 ```php try { // 1. 声明出现异常的区域,主动抛出异常 throw new Exception('主动抛出异常'); } catch (Exception $exception) { // 2. 捕获异常,可重新抛出异常 echo $exception -> getMessage(); } ## 关键点:如果抛出了异常,就必须捕获它 ``` ### 2. 内置异常处理类 ## 13. PHP 接收前端数据方法 1. ` $_GET ` 2. ` $_POST ` 3. ` $_FILE ` 4. ` _REQUEST ` 5. ` $_SERVER ` ## 14. PHP 文件引入 1. include:常用在流程控制中,引入的文件中写的是相关逻辑上的操作,对局部起作用 2. require:常放到 PHP 最前边,文件中写的是外部可以调用的代码、类、函数、定义常量,对整体起作用 3. _once:可以用在只能引入一次的文件上 ## 12. 文件操作 ### 1. 分布读取 1. ` fopen `:获取一个文件句柄 2. ` fread `:按照一定长度读取 3. ` feof `:判断是否读取到末尾 4. ` fwirte `:写入文件 5. ` fclose `:关闭文件句柄 ### 2. 整体读取 1. ` file_get_contents `:读取文件 2. ` file_put_contents `:写入文件 ## 13. 数据库操作 1. PHP PDO 可以操作多种数据库 2. 示例 ## 14. 网络套接字接口 ## 15. PHP 包管理 ## 附录其他 ### 1、Laravel 文档 1. [laravel-dos.md](laravel-dos.md) ### 2、代码编程之道 1. [clean-code.md](clean-code.md)