learnxinyminutes-docs 法文版 PHP 5+ 速查指南:从基础语法到面向对象与命名空间全解析

发布时间:2026/10/8 13:59:48
learnxinyminutes-docs 法文版 PHP 5+ 速查指南:从基础语法到面向对象与命名空间全解析
文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载本篇基于 fr/php.mdlearnxinyminutes-docs 仓库中的 PHP 法文版教程编写。该文档以可运行的带注释代码形式系统讲解了 PHP 5 的核心语法变量与类型、常量、数组、输出、逻辑运算、控制结构、函数、文件包含、类与对象、接口以及命名空间。读完本文你将掌握一套可直接复制运行的 PHP 语法速查代码理解 PHP 作为模板引擎出身所特有的标签语义、弱类型与隐式转换行为并能对照仓库中的英文原版、中文版与 Composer 依赖管理教程继续深入。一、文档定位与项目背景learnxinyminutes-docs 是一个以代码即文档为理念的开源仓库每一篇语言教程都尽量以完整、可运行的注释代码呈现。法文版 fr/php.md 在文件头部的 YAML frontmatter 中声明了filename: php.php、贡献者与译者信息这与仓库的 lint/frontmatter.py 校验规则允许name、filename、contributors、translators、category等键完全一致——每个文档都遵循统一的元数据规范方便自动校验与站点发布。该教程与仓库根目录的英文原版 php.md、中文版 zh-cn/php.md 同源法文版在内容组织上忠实于英文原版并保留了法文注释。其开篇即点明本文档面向PHP 5涵盖从 PHP 5.3 到 PHP 7 的多个语法演进点匿名函数、短数组语法、太空船操作符、匿名类、常量数组等。二、PHP 标签、注释与模板输出语义PHP 代码必须放置在?php与?标签之间?php // 如果文件里只有 PHP 代码惯例是不写关闭标签 ? // 以免文件末尾产生意外的空白字符输出注释支持三种写法// 双斜杠是单行注释 # 井号同样是单行注释但双斜杠更常见 /* 斜杠加星号用于多行注释 */PHP 起源于模板引擎因此标签之外的所有内容都会被原样输出?php // 标签内的逻辑... ? Hello World Again! !-- 这一行会直接输出到响应中 -- ?php这是理解 PHP 与 HTML 混写、模板语法的基石标签外的文本等价于隐式的echo。三、输出echo、print 与短标签echo与print是语言结构language constructs而非函数括号可省略print(Hello ); // 输出 Hello 无换行 echo World\n; // 输出 World 并换行 echo Hello World!; // 不带括号的写法同样合法 print Hello World!;所有语句必须以分号结尾。echo可以直接输出标量与变量$paragraph paragraphe; echo 100; // 输出标量 echo $paragraph; // 输出变量短输出标签?是echo的简写。当开启短标签配置、或 PHP 版本为 5.4.0 时可用? p? $paragraph ?/p ?php?在现代 PHP含 PHP 5.4 与所有主流框架模板中始终可用是模板中输出变量最推荐的方式。调试输出还有两个利器var_dump($z); // 输出变量的类型与值例如 int(0) print_r($array); // 以人类可读格式输出数组例如 Array ( [0] One [1] Two [2] Three )四、类型与变量4.1 变量命名与布尔值PHP 变量以$开头合法的变量名以字母或下划线开头后跟任意字母、数字或下划线。布尔值不区分大小写$boolean true; // 或 TRUE 或 True $boolean false; // 或 FALSE 或 False4.2 整数与浮点数$int1 12; // 12 十进制 $int2 -12; // -12 $int3 012; // 10 前导 0 表示八进制 $int4 0x0F; // 15 前导 0x 表示十六进制浮点float/double支持科学计数法$float 1.234; $float 1.2e3; // 1200 $float 7E-10; // 0.0000000007英文原版 php.md 还补充了 PHP 5.4.0 起可用的二进制字面量0b11111111法文版未包含。使用unset()可删除变量unset($int1);4.3 算术运算与简写$sum 1 1; // 2 加法 $difference 2 - 1; // 1 减法 $product 2 * 2; // 4 乘法 $quotient 2 / 1; // 2 除法 $number 0; $number 2; // $number 增加 2 echo $number; // 输出 2先求值后自增 echo $number; // 输出 4先自增后求值 $number / $float; // 除法并赋值注意$number与$number的求值顺序差异后缀自增返回原值前缀自增返回新值。4.4 字符串引号语义与转义单引号字符串几乎不做任何解释双引号字符串会进行变量插值与转义$sgl_quotes $String; // $String原样保留 $dbl_quotes Ceci est une $sgl_quotes.; // Ceci est une $String.特殊字符如\t制表符只在双引号中生效$escaped Ceci contient \t une tabulation.; // 含真实制表符 $unescaped Ceci contient juste un slash et un t: \t; // 字面量 \t当变量名与后续字符产生歧义时可用花括号包裹$money Jai $${number} sur mon compte en banque.;${number}语法与{$number}均可实现边界隔离后者更推荐。4.5 Nowdoc 与 HeredocPHP 5.3 起支持多行字符串的两种形态// Nowdoc不进行变量插值类似单引号语义 $nowdoc END String mutli-lignes END; // Heredoc进行变量插值类似双引号语义 $heredoc END $sgl_quotes multi-lignes END;4.6 字符串拼接PHP 用.拼接字符串echo Cette string . est concatenée; // Cette string est concaténée五、常量define() 与运行时不可变常量通过define()声明运行期间不可更改。合法常量名以字母或下划线开头define(FOO, something); // 访问常量时无需 $ 符号 echo Ceci affiche . FOO;PHP 7 起define()还可以声明数组常量define(ANIMAUX, [ chien, chat, oiseau, ]);这与后面要讲的PHP 中所有数组都是关联数组的特性配合可以构建结构化的全局配置。六、数组一切皆关联数组PHP 中所有数组都是关联数组hashmap列表字面量只是自动分配整数键的关联数组// 所有 PHP 版本可用 $associative array(One 1, Two 2, Three 3); // PHP 5.4 引入的短数组语法 $associative [One 1, Two 2, Three 3]; echo $associative[One]; // 输出 1列表数组自动获得整数键$array [One, Two, Three]; echo $array[0]; // One尾部追加与删除元素$array[] Four; // 追加到末尾 unset($array[3]); // 删除索引 3 的元素英文原版还演示了array_push($array, Five)与关联数组追加$associative[Four] 4的写法php.md 中有完整示例。七、引用、逻辑运算与类型转换7.1 变量引用创建引用而非副本$x 1; $y 2; $x $y; // $x 获得 $y 的值副本 $z $y; // $z 是 $y 的引用改 $z 即改 $y echo $x; // 2 echo $z; // 2 $y 0; echo $x; // 2副本不受影响 echo $z; // 0引用联动7.2 宽松比较与严格比较assert()会在参数表达式为假时发出警告用于演示比较语义$a 0; $b 0; $c 1; $d 1; // 宽松比较只看值不看类型 assert($a $b); // 相等 assert($c ! $a); // 不相等 assert($c $a); // 不相等 是不常用的别名写法 assert($a $c); assert($c $b); assert($a $b); assert($c $d); // 严格比较值与类型都必须一致 assert($c $d); assert($a ! $d); assert(1 1); // 断言失败int 与 string 类型不同 assert(1 ! 1); // 成立会进行隐式类型转换要求类型也相同。法文版文档特意用assert(1 1)这类必然失败的断言来强调严格比较的语义这是 PHP 弱类型最容易踩坑的地方。7.3 太空船操作符PHP 7$a 100; $b 1000; echo $a $a; // 0 两边相等 echo $a $b; // -1 $a $b echo $b $a; // 1 $b $a返回 -1/0/1 三态非常适合排序回调。7.4 隐式与显式类型转换PHP 变量会按使用场景自动转型$integer 1; echo $integer $integer; // 2 $string 1; echo $string $string; // 2字符串被强制转为整数 $string one; echo $string $string; // 0one 无法转为数字视为 0显式强制转换与专用函数$boolean (boolean) 1; // true $zero 0; $boolean (boolean) $zero; // false $integer 5; $string strval($integer); // 专用转换函数 $var null; // 空值八、控制结构8.1 条件分支if (true) { print Je suis affiché; } if (false) { print Je ne le suis pas; } else { print Je suis affiché; } if (false) { print Je ne suis pas affiché; } elseif (true) { print Je le suis; }三元运算符print (false ? N\est pas affiché : L\est);PHP 5.3 起的三元简写?:等价于$x ? $x : 默认值$x false; print($x ?: Does); // 输出 DoesPHP 7 的空合并运算符??左侧为 null 时取右侧$a null; $b Hello World; echo $a ?? a is not set; // 输出 a is not set echo $b ?? b is not set; // 输出 Hello World严格比较在实际分支中的价值$x 0; if ($x 0) { print Pas affiché; } elseif($x 1) { print Pas affiché; } else { print Affiché; }8.2 模板化替代语法if/elseif/else、foreach、for、while、switch都支持以冒号和endif/endforeach等结尾的替代语法特别适合与 HTML 混写? ?php if ($x): ? pCeci est affiché si $x est vrai/p ?php else: ? pCeci est affiché si $x est faux/p ?php endif; ? ?php8.3 switchswitch ($x) { case 0: print Les switch font du transtypage implicite; break; // 必须 break否则会继续落入下面的 case case two: case three: // 当 $x two 或 $x three 时执行 break; default: // 没有任何 case 命中时执行 }switch同样做隐式类型转换且多个 case 可以共用同一段逻辑fall-through 分组。8.4 循环// while $i 0; while ($i 5) { echo $i; } // 输出 01234 // do...while至少执行一次 $i 0; do { echo $i; } while ($i 5); // 输出 01234 // for for ($x 0; $x 10; $x) { echo $x; } // 输出 01234567898.5 foreach 与键遍历$wheels [bicycle 2, car 4]; // 只取值 foreach ($wheels as $wheel_count) { echo $wheel_count; } // 输出 24 // 同时取键与值 foreach ($wheels as $vehicle $wheel_count) { echo The $vehicle have $wheel_count wheels; }8.6 break 与 continue// break 提前终止循环 $i 0; while ($i 5) { if ($i 3) { break; } echo $i; } // 输出 012 // continue 跳过当前迭代 for ($i 0; $i 5; $i) { if ($i 3) { continue; } echo $i; } // 输出 0124九、函数9.1 基础函数与默认参数function my_function () { return Hello; } echo my_function(); // Hello // 函数名规则同变量名字母或下划线开头 function add ($x, $y 1) { // $y 可选默认值 1 $result $x $y; return $result; } echo add(4); // 5 echo add(4, 2); // 6函数内的局部变量在函数外不可见print $result;会产生警告。9.2 匿名函数与闭包PHP 5.3 起可声明匿名函数$inc function ($x) { return $x 1; }; echo $inc(2); // 3函数可以返回函数并通过use捕获外部变量function foo ($x, $y, $z) { echo $x - $y - $z; } function bar ($x, $y) { return function ($z) use ($x, $y) { foo($x, $y, $z); }; } $bar bar(A, B); $bar(C); // 输出 A - B - C9.3 字符串调用与 call_user_func可以用保存函数名的字符串动态调用函数$function_name add; echo $function_name(1, 2); // 3 // 适合程序化地决定调用哪个函数 // 或使用回调函数调用器 call_user_func(callable $callback [, $parameter [, ... ]]);英文原版 php.md 还补充了func_num_args()/func_get_args()获取全部实参以及 PHP 5.6 起的变长参数function variable($word, ...$list)。十、文件包含include 与 require被包含文件内的 PHP 代码同样必须以?php开头include my-file.php; // 文件代码进入当前作用域文件不存在时仅产生警告 include_once my-file.php; // 若该文件已被包含过则不会重复包含避免重复声明类 require my-file.php; require_once my-file.php; // 与 include 行为一致但文件无法包含时会触发致命错误include/require还可以返回文件的值// my-include.php 内容 ?php return Anything you like.; // 文件结束 $value include(my-include.php);文件查找顺序优先按给出的路径未给路径时按include_path配置查找若仍未找到include最后会检查调用脚本所在目录与当前工作目录然后才失败。十一、类与面向对象11.1 类声明、常量、静态成员与可见性class MyClass { const MY_CONST value; // 类常量 static $staticVar static; // 静态属性与可见性 public static $publicStaticVar publicStatic; // 仅类内部可访问 private static $privateStaticVar privateStatic; // 类内部与子类可访问 protected static $protectedStaticVar protectedStatic; // 属性必须声明可见性 public $property public; public $instanceProp; protected $prot protected; private $priv private; // 构造方法 __construct public function __construct($instanceProp) { // 通过 $this 访问实例属性 $this-instanceProp $instanceProp; } // 类内函数即方法 public function myMethod() { print MyClass; } // final 关键字使方法无法被子类重写 final function youCannotOverrideMe() { } // 静态方法 public static function myStaticMethod() { print Je suis static; } }静态成员无需实例化即可访问静态属性不能通过实例访问但静态方法可以echo MyClass::MY_CONST; // 输出 value echo MyClass::$staticVar; // 输出 static MyClass::myStaticMethod(); // 输出 Je suis static11.2 实例化与成员访问$my_class new MyClass(An instance property); echo $my_class-property; // public echo $my_class-instanceProp; // An instance property $my_class-myMethod(); // MyClass英文原版还说明不传参时new的括号可省略并使用-访问成员。11.3 继承与重写class MyOtherClass extends MyClass { function printProtectedProperty() { echo $this-prot; // 子类可访问 protected 属性 } // 重写父类方法 function myMethod() { parent::myMethod(); // 显式调用父类版本 print MyOtherClass; } } $my_other_class new MyOtherClass(Instance prop); $my_other_class-printProtectedProperty(); // 输出 protected $my_other_class-myMethod(); // 输出 MyClass MyOtherClass用final class禁止类被继承final class YouCannotExtendMe { }11.4 魔术方法__get 与 __setclass MyMapClass { private $property; public function __get($key) { return $this-$key; } public function __set($key, $value) { $this-$key $value; } } $x new MyMapClass(); echo $x-property; // 触发 __get() $x-property Something; // 触发 __set()英文原版还演示了__toString()与__destruct()两个魔术方法。11.5 抽象类、接口与多接口实现interface InterfaceOne { public function doSomething(); } interface InterfaceTwo { public function doSomethingElse(); } // 接口可以继承接口 interface InterfaceThree extends InterfaceTwo { public function doAnotherContract(); } abstract class MyAbstractClass implements InterfaceOne { public $x doSomething; } class MyConcreteClass extends MyAbstractClass implements InterfaceTwo { public function doSomething() { echo $x; } public function doSomethingElse() { echo doSomethingElse; } } // 一个类可以实现多个接口 class SomeOtherClass implements InterfaceOne, InterfaceTwo { public function doSomething() { echo doSomething; } public function doSomethingElse() { echo doSomethingElse; } }11.6 PHP 7 匿名类匿名类常用作一次性实现例如为依赖接口的类注入实现interface Logger { public function log(string $msg); } class Application { private $logger; public function getLogger(): Logger { return $this-logger; } public function setLogger(Logger $logger) { $this-logger $logger; } } $app new Application; $app-setLogger(new class implements Logger { public function log(string $msg) { echo $msg; } }); var_dump($app-getLogger()); // object(classanonymous)#2 (0) {}英文原版 php.md 还包含 TraitsPHP 5.4、PHP 8 空安全操作符?-、后期静态绑定static::、__CLASS__/__DIR__/__FILE__/__LINE__等魔术常量以及try/catch异常处理与自定义异常类可作为法文版的进阶补充阅读。十二、命名空间命名空间声明必须是文件中的第一条语句。默认情况下类位于全局命名空间可用前置反斜杠显式引用$cls new \MyClass();为文件声明命名空间namespace My\Namespace; class MyClass { }从其他文件引用$cls new My\Namespace\MyClass;在另一个命名空间内用use导入namespace My\Other\Namespace; use My\Namespace\MyClass; $cls new MyClass();或为命名空间设置别名namespace My\Other\Namespace; use My\Namespace as SomeOtherNamespace; $cls new SomeOtherNamespace\MyClass();十三、继续学习的仓库资源法文版原文fr/php.md本篇的母本PHP 5 范围英文原版内容最全含 Traits、异常处理、魔术常量、PHP 8 特性php.md中文版便于对照术语zh-cn/php.mdComposer 依赖管理实战法文版文末推荐的包管理器php-composer.md文档元数据校验脚本理解每个教程头部 YAML frontmatter 的规范lint/frontmatter.py若需进一步学习官方 PHP 手册提供权威参考PHP The Right Way 汇集了现代最佳实践Composer 是 PHP 生态的事实标准依赖管理器PHP-FIG 的 PSR 系列标准则定义了编码规范与接口互操作约定PSR-4 自动加载、PSR-7 HTTP 消息等这些资源在法文版文末均有提及可与本仓库教程配合使用。赞分享文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载相关推荐基于 learnxinyminutes-docs 的 C 全面语法速查指南从基础语法到 C 6/7 新特性实战基于 learnxinyminutes docs 的 C 全面语法速查指南从基础语法到 C 6/7 新特性实战 本篇技术指南以 learnxinyminute文档教程Java 语言速成指南Learn X in Y minutes 法文版精读从语法基础到面向对象编程Java 语言速成指南Learn X in Y minutes 法文版精读从语法基础到面向对象编程 本文以 fr/java.md https://link文档教程learnxinyminutes-docs 芬兰语版 Go 速成教程从基础语法到并发与 Web 编程learnxinyminutes docs 芬兰语版 Go 速成教程从基础语法到并发与 Web 编程 本指南以 learnxinyminutes docs 仓文档教程上一篇requests内存泄漏排查连接未关闭与资源释放全解析下一篇给 qBittorrent 换上 81 个活 Tracker用 trackerslist 5 分钟提速避坑创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考