PHP基础总结

我是一名从零开始,经过半年的PHP实践的初级工程师。这篇文章是为了整理我在实践和学习中所学到的内容而写的。(学习内容是基于山浦清透先生的自学工程师网站所学而输出的。对于想掌握作为一名工程师的基础能力的人来说,我强烈推荐这篇文章。)如果您是PHP初学者,欢迎参考。

在实际工作中所需的态度(三个)

    1. 只编写能理解的代码

 

    1. 只靠复制粘贴能运行并不意味着在出现障碍、问题或错误时能够解决。

编写易读的代码
功能的追加和修改是必然的。在这种情况下,必须编写一目了然的代码才能进行相应的修改。
(考虑了团队开发和未来发展吗?)

编写易变更的代码
不仅是应急代码,而是编写易于修改功能、具有高扩展性的代码。
(考虑了操作方式吗?)
※面向对象的设计方法能够实现代码的改变和扩展

PHP:变量

在中文中产生变量。

技术是为了解决问题而创建的。
为了正确地运用技术,了解技术产生的解决方案的目的是非常重要的。
通过了解变量的生成方式,目标是能更好地使用变量。

在引入变量名称的概念之前

在没有姓名概念的时代,使用存储器中的“数值”进行识别。
(例如)
在25号地址保存书名的数据。从25号地址中提取书名的数据。
在26号地址保存作者名的数据。从26号地址中提取作者名的数据。
[24号地址] [25号地址] [26号地址] ・・・
必须记住在哪个地址存储了什么数据。

为了使代码更易于读写…

为了增加可读性,决定在内存空间的地址位置上贴上类似’name’的标签。
(例)
[24号地址(’##’)] [25号地址(’name’)] [26号地址(’author’)] ・・・
将书名数据保存在’name’中。从’name’中提取书名数据。
将作者数据保存在’author’中。从’author’中提取书名数据。
通过贴上标签,一眼就能看出保存了哪些数据,从而使代码的阅读和编写变得更加容易。

变量是将值存储在每个内存区域,并标记每个区域的标签。
(为了使代码易于阅读,变量名称应该起一个易于理解含义的名字,这很重要)。

变量的行为

$a = 'abc';
$b = $a;
$c = &$a;
$a[0] = 'z'; //$aの1文字目を'z'に変更

echo $a . PHP_EOL; //出力結果:zbc
echo $b . PHP_EOL; //出力結果:abc
echo $c . PHP_EOL; //出力結果:zbc

「リファレンス」とは什么意思?

在PHP中,变量名和变量的内容是分开存在的。对于相同内容的值,可以有多个不同的名称。

更换另一个名字。

$c = &$a; // 'abc'の値に、$aと$cという変数名のラベルを貼っている

在变量前加上&符号进行赋值时,指向引用的地址会被赋值。
引用:指代别名(类似昵称的东西)

在对常规变量进行赋值时发生的事情

$b = $a; // $aからコピーした'abc'という値を$bに入れている

由于变量$a和$b是不同的,因此修改$a的值不会改变$b的值。

在通常的变量赋值中,被赋值的是”表达式”。

$b中已经被赋值了一个表达式(\$a)。
表达式:包含所有有值的元素。

变量的作用域

仅仅给变量起了个名字的问题

对于只是命名的变量实际上存在问题。
这个问题是什么以及如何解决的故事。

如果变量的名称与变量的内容在整个程序中是一对一的关系,会出现名称冲突。(只有在全局作用域中才会出现名称冲突)

避免姓名冲突

为了避免变量名称的冲突,人们引入了一个被称为“作用域”的概念。

通过准备本地作用域并限定名称的有效范围,确保名称不会重复。
将其分为各自独立的映射表,以便每次函数调用时使用。

PHP的作用域 (PHP de zuoyongqu)

在PHP中,有全局作用域和局部作用域。

$num = 0;  //グローバルスコープ(有効範囲がプログラム全体)

function call() {
  $num = 0;  //ローカルスコープ(有効範囲が関数やクラス内)
}

请注意:如果想在函数内使用全局范围的变量,则需要通过函数的参数进行传递。
补充说明:局部范围的有效范围因语言而异。

在定义变量时,重要的是根据名称的有效范围来考虑定义位置。

预定义变量

在中文中,定义好的变量有两种类型。

已定义的变量

在PHP中,变量会在运行时自动定义。

変数意味$http_response_headerHTTPレスポンスヘッダ配列$argcCLIでスクリプトに渡された引数の数$argvCLIでスクリプトに渡された引数の配列

超级全局变量

任何作用域均可使用的全局变量。

変数意味$GLOBALS全てのグローバル変数への参照を持つ連想配列$_SERVERサーバー情報および実行時の環境情報を持つ連想配列$_POSTHTTP POSTで渡された変数の連想配列$_FILESアップロードされた項目の連想配列$_COOKIEHTTPクッキーから渡された変数の連想配列$_SESSIONセッション変数を含む連想配列$_REQUEST$_GET、$_POST、$_COOKIEの内容をまとめた連想配列$_ENV環境変数の連想配列

PHP:常量

在运行过程中无法更改值的是常量。

为什么会诞生常数?

有时候仅仅使用变量是不够的,因此常数应运而生。

下面的代码是一个只使用变量会有困难的情况的示例。
(仅使用变量时,不希望被修改的值也可能被修改)

$tax = 0.1;
$price = 100 * (1 + $tax);
echo $price . PHP_EOL; // 110

// 別の箇所で気づかずに $tax に別の値を代入してしまったら$priceが正しくない結果になってしまう
$tax = 0.08;
$price = 100 * (1 + $tax);
echo $price . PHP_EOL; // 108

数的性质

    • 一度設定されると再定義または未定義にできない

 

    • 変数のスコープに関係なく、どんな場所からでもアクセス可能

 

    前に$記号がいらない

定数的定义

    • constキーワードの後に指定することで定数を定義できる

 

    ※トップレベルのスコープで定義する必要がある(関数やif文やループの中では宣言できない、ブロックの外側で宣言する必要があるという意味)
const TAX = 0.1 // 慣習的に常に大文字で定義される(変数と見分けをつけるため)
$price = 100 * (1 + TAX);
echo $price . PHP_EOL; // 110

// 後から定数の値を変更することはできない
TAX = 0.08; // syntax error
$price = 100 * (1 + $tax);
echo $price . PHP_EOL;

const TAX_RATE= 0.1 // 複数単語の場合は _ で繋げる

在使用常数的场景中,主要有三个。

    1. 当我们不想更改数值时

 

    1. 当我们希望给数值赋予意义时

 

    当我们希望对数值进行统一管理时

預先設定的常數

在PHP中有两种类型的常量,分别是自动定义的常量和魔术常量。

自动定义的常量

代表性的东西

定数意味PHP_VERSION現在のPHPのバージョンPHP_OS実行しているOSE_ERROR重大な実行時エラーのエラー番号

魔法常数

魔法常数是指根据使用场所自动变化的预定义常数。

代表性的东西

定数意味__DIR___ファイルのフルパスとファイル名__FILE__ファイルの存在するディレクトリ__LINE__ファイル上の現在の行番号__FUNCTION__関数名

PHP: 类型

为什么会出现分类?

在计算机中,数据以1或0(开或关)的形式表示。它类似于灯泡开启或关闭的形象。由于仅凭这个无法区分数据的类型,因此为了区分数据的”是什么类型的值”,”类型”的概念应运而生。

二进制

计算机以自然数(0〜9)作为基础来处理数据。
当考虑如何用灯光的开和关来表示这些自然数时,二进制是最优和最高效的表示方法。
因此,计算机内部使用二进制来处理数据。
“类型”用于指示二进制数值的具体种类。

模型的发展

随后,这种类型便开始发展成为多种用途的形式。

    • 仕様としての型で安全性を高めるようになった

 

    • 関数の引数や戻り値に型を明示することで、プログラムの安全性を高める

 

    • 動的型付けも登場した

 

    型を明示しない動的型付けも誕生した。PHPは動的型付けにより型を自動で判断する。

PHP的数据类型:①整数

整数可以分为正整数、零和负整数。

echo gettype(1);   // integer
echo gettype(0);   // integer
echo gettype(-1);  // integer

可以表示二进制数、八进制数和十六进制数。

var_dump(0b10);   // int(2)   2進数
var_dump(010);    // int(8)   8進数
var_dump(0x10);   // int(16)  16進数

整数有一个最大值,当超过最大值时会被转换为浮点数类型(float)。

var_dump(PHP_INT_MAX);       // int(9223372036854775807)
var_dump(PHP_INT_MAX + 1);   // float(9.223372036854776E+18)

PHP的数据类型:浮点数

浮点数是指不能用整数来表示的实数,比如小数或分数。

    初期化には2種類の方法がある
$float1 = 1.1;
$float2 = 1.1e2;    // 指数表記。1.1*10の2乗
var_dump($float1);  // float(1.1)
var_dump($float2);  // float(110)

处理浮点数的方法

浮点数具有精度限制,因此在处理时需要注意。
小数可能会发生舍入误差的可能性。

    • 小数点を使った比較、計算をしないようにする

 

    浮動小数点で比較や計算を行うときは任意精度数学関数(BC Math関数)を使う

PHP的数据类型:③字符串

文字列的特点

文字列是由多个字符连接而成的东西。

初期化はシングルクォートもしくはダブルクォートを使う

シングルクォートは変数を展開しない
ダブルクォートは変数を展開する
シングルクォートの方が動作処理速度は速い

文字列と変数の結合にはドット記号を使うこともできる

$var = 1;
echo '$var years old';    // $var years old
echo "$var years old";    // 1 years old
echo "${var}years old";   // 1years old
echo $var . 'years old';  // 1years old

转义处理

要将单引号和双引号作为字符处理,需要进行转义。

echo 'I\'m "Jun 2035"' . PHP_EOL;  //I'm "Jun 2035"

Here is one option for paraphrasing “ヒアドキュメントとNowdoc” in Chinese:

“Here-doc和Now-doc”

有两种方法可以用来写入多行的长字符串,分别是“heredoc”和“nowdoc”。

    ヒアドキュメントはダブルクォートで囲んだ文字列として扱う(変数展開される)
$name = 'Jun2035';
$str = <<<EOT
こんにちは。
名前は $name です。
EOT;  // 名前は Jun2035 です。
    Nowdocはシングルクォートで囲んだ文字列として扱う(変数展開されない)
$name = 'Jun2035';
$str = <<<'EOT'
こんにちは。
名前は $name です。
EOT;  // 名前は $name です。

转义序列

转义序列是用来表示在程序中难以处理的字符的一种方式。

    以下はダブルクォートで囲まれた場合、特殊な文字として解釈される
エスケープシーケンス意味\nラインフィード(改行)\rキャリッジリターン(改行)\tタブ
    改行コードを実行環境で切り替えたいときはPHP_EOLを使う
OS改行コードPHP_EOLMac / Linuxラインフィード\nWindowsキャリッジリターン+ラインフィード\r\n

请注意半角字符串和全角字符串的区别。

    全角文字はマルチバイトとしてカウントされるので注意
$str1 = 'abc';
$str2 = 'あいう';
echo strlen($str1);     // 3
echo strlen($str2);     // 9
echo mb_strlen($str2);  // 3
    半角と全角のゆらぎは統一すべし
$name1 = 'ムラカミハルキ';  // 半角
# 半角カタカナは全角カタカナに、全角スペースは半角スペースに、
# 全角英数字は半角英数字に変換する
echo mb_convert_kana($name, 'Kas'); // ムラカミ ハルキ

PHP: 运算符

追加计划

PHP: 控制结构

添加预定

PHP: 调试方法

加上备注计划

面向对象:概念。

追加计划

面向对象:类

附加备注计划

面向对象:接口

追加计划

面向对象编程:命名空间

待补充的内容

面向对象:异常处理

添加计划