PHP 标记

  • <?php 开头, ?>结尾,经常的时候 ?> 省略。
  • 当文件是纯PHP代码的时候,不建议使用结束标签?>
  • 当文件是PHP代码和HTML代码混合的时候,PHP结束标签?>不允许省略

PHP 中的注释

  • // 单行注释
  • 单行注释

  • / / 多行注释

PHP 中的大小写敏感问题

  • 所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感
  • 所有变量都对大小写敏感

PHP 变量规则

  • 变量以 $ 符号开头,其后是变量的名称
  • 变量名称必须以字母或下划线开头,不能以数字开头(java也是这样)
  • 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
  • 变量名称对大小写敏感($y 与 $Y 是两个不同的变量)

PHP 语言类型

  • 首先PHP是一门弱类型语言,我们定义变量时候我们不必告知php的数据类型
  • C 和 C++ 以及 Java 之类的语言中,程序员必须在使用变量之前声明它的名称和类型。

编程语言概念性知识-小结

1. 什么是静态语言,什么是动态语言?

静态语言(强类型语言): 指在编译变量的阶段,就可以确定变量的数据类型的语言,绝大多数静态语言要求变量在定义时必须明确给 出它的数据类型 例如:C、C++、C#、Java

动态语言(弱类型语言): 指在运行阶段才会确定数据的基本类型。变量在使用前不需要加上它的数据类型 例如:JS、PHP、Python、Ruby

2. 什么是强类型语言,什么是弱类型语言?

强类型语言: 一个变量一旦确定了数据类型,除非强制转换否则数据类型保持不变

弱类型语言: 通常不必在意变量的数据类型

3. 什么是解释性语言,什么是编译性语言?

image.png

编译性语言: 程序完成后,由编译器先进性编译,将代码转成机器码最终编译这个文件,可以生成可执行文件在操作系统上执行。一次编译,然后运行 例如:C、C++

解释性语言:
程序完成后,由解释器一行一行逐条运行。 例如:PHP、Python

半编译性半解释性语言: java既不是编译性语言也不是解释性语言。 它的运行过程如下,首先由编译器编译成 .class 字节码文件,然后在JVM上读取.class 文件,读取一行解释一 行最后执行。 所以说 Java 的跨平台性完全就是JVM的功劳,java对不同的操作系统有不同的JVM,这就是java的跨平台性 例如: Java 、C#


PHP 变量作用域

  • local(局部作用域)
  • global(全局作用域)
  • static(静态作用域)

1. 全局作用域和局部作用域

  1. <?php
  2. // error_reporting(E_ALL ^ E_NOTICE);//显示除去 E_NOTICE 之外的所有错误信息
  3. $x=5; // 全局作用域
  4. function myTest()
  5. {
  6. $y = 10; // 局部作用域
  7. echo "函数内部: <br>";
  8. echo "x = " . $x . "<br> y = " . $y . "<br>";
  9. }
  10. myTest();
  11. echo "函数外部: <br>";
  12. echo "x = " . $x . "<br> y = " . $y . "<br>";

运行结果
如果没有关闭notice提醒,会在第9行和第15行显示未定义的变量。关闭后
image.png
这是因为,在函数内部我们访问不到外部的变量,而在外部我们也无法访问内部的变量。
很多编程语言都是如此,

此时我们不开心如果我就要在函数内部访问到 $Xx 这个变量呢?

  1. <?php
  2. $x = 5; // 全局作用域
  3. function myTest()
  4. {
  5. global $x;
  6. $y = 10; // 局部作用域
  7. echo "函数内部: <br>";
  8. echo "x = " . $x . "<br> y = " . $y . "<br>";
  9. }
  10. myTest();
  11. echo "函数外部: <br>";
  12. echo "x = " . $x . "<br> y = " . $y . "<br>";

运行结果
image.png

我们仅仅是在第5行声明了$x 这个变量是 global的,同理我们如果想要在函数外部访问到 $y 变量

  1. <?php
  2. $x = 5; // 全局作用域
  3. function myTest()
  4. {
  5. global $x, $y;
  6. $y = 10; // 局部作用域
  7. echo "函数内部: <br>";
  8. echo "x = " . $x . "<br> y = " . $y . "<br>";
  9. }
  10. myTest();
  11. echo "函数外部: <br>";
  12. echo "x = " . $x . "<br> y = " . $y . "<br>";

运行结果
image.png

其实,除了这些我们还可以在 $GLOBALS[index] 的数组中存储了所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量。

  1. <?php
  2. error_reporting(E_ALL ^ E_NOTICE);//显示除去 E_NOTICE 之外的所有错误信息
  3. $x = 5;
  4. $y = 10;
  5. function myTest()
  6. {
  7. echo 'x = ' . $GLOBALS['x'] . '<br>';
  8. echo 'y = ' . $GLOBALS['y'] . '<br>';
  9. }
  10. myTest();
  11. $GLOBALS['x'] = 1;
  12. $GLOBALS['y'] = 2;
  13. echo 'x = ' . $GLOBALS['x'] . '<br>';
  14. echo 'y = ' . $GLOBALS['y'] . '<br>';

运行结果
image.png
我们可以看到 $GLOBALS[‘变量名称’] 可以做到以下两点。
a. 访问到所有的全局变量
b. 对其中任意一个全局变量的值进行更改

此时我产生了好奇,我想看看$GLOBALS这个PHP数组,里面存放那些东西

  1. <?php
  2. echo "<pre>";
  3. print_r($GLOBALS);
  4. echo "</pre>";

结果如下:

Array ( [_GET] => Array( ) [_POST] => Array( ) [_COOKIE] => Array( ) [_FILES] => Array( ) [_ENV] => Array( ) [_REQUEST] => Array( ) [_SERVER] => Array ( [PATH] => C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NGX;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;D:\app\17441\product\11.2.0\dbhome_1\bin;D:\app\17441\product\11.2.0\dbhome_1\BIN;F:\QQ\Tencent\QQ\Bin;F:\wamp\bin\mysql\mysql5.7.24\bin;F:\wamp\bin\php\php7.3.1;F:\nodejs\;F:\composer;F:\nodejs\node_global;F:\phpStudy\PHPTutorial\MySQL\bin;F:\phpStudy\PHPTutorial\php\php-7.2.1-nts;F:\phpStudy\PHPTutorial\php\php-7.2.1-nts\ext;D:\mingw64\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\ProgramData\ComposerSetup\bin;F:\Git\bin;F:\Git\cmd;C:\Users\17441\AppData\Local\Microsoft\WindowsApps;C:\Users\17441\AppData\Local\GitHubDesktop\bin;C:\Users\17441\AppData\Roaming\Composer\vendor\bin;D:\Bandizip\;C:\Users\17441\AppData\Roaming\npm;F:\Microsoft VS Code\bin;C:\Users\17441\AppData\Local\Microsoft\WindowsApps [SYSTEMROOT] => C:\WINDOWS [COMSPEC] => C:\WINDOWS\system32\cmd.exe [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

  1. [WINDIR] => C:\WINDOWS
  2. [PHP_FCGI_MAX_REQUESTS] => 1000
  3. [PHPRC] => F:/phpStudy/PHPTutorial/php/php-7.2.1-nts/
  4. [_FCGI_SHUTDOWN_EVENT_] => 2192
  5. [SCRIPT_NAME] => /numb/Basic/2020-2-26/a.php
  6. [REQUEST_URI] => /numb/Basic/2020-2-26/a.php
  7. [QUERY_STRING] =>
  8. [REQUEST_METHOD] => GET
  9. [SERVER_PROTOCOL] => HTTP/1.1
  10. [GATEWAY_INTERFACE] => CGI/1.1
  11. [REMOTE_PORT] => 55202
  12. [SCRIPT_FILENAME] => F:/phpStudy/PHPTutorial/WWW/Numb/Basic/2020-2-26/a.php
  13. [SERVER_ADMIN] => admin@php.cn
  14. [CONTEXT_DOCUMENT_ROOT] => F:/phpStudy/PHPTutorial/WWW
  15. [CONTEXT_PREFIX] =>
  16. [REQUEST_SCHEME] => http
  17. [DOCUMENT_ROOT] => F:/phpStudy/PHPTutorial/WWW
  18. [REMOTE_ADDR] => 127.0.0.1
  19. [SERVER_PORT] => 80
  20. [SERVER_ADDR] => 127.0.0.1
  21. [SERVER_NAME] => 127.0.0.1
  22. [SERVER_SOFTWARE] => Apache/2.4.23 (Win32) OpenSSL/1.0.2j mod_fcgid/2.3.9
  23. [SERVER_SIGNATURE] =>
  24. [SystemRoot] => C:\WINDOWS
  25. [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.9,en;q=0.8
  26. [HTTP_ACCEPT_ENCODING] => gzip, deflate, br
  27. [HTTP_REFERER] => http://127.0.0.1/numb/Basic/2020-2-26/
  28. [HTTP_SEC_FETCH_USER] => ?1
  29. [HTTP_SEC_FETCH_MODE] => navigate
  30. [HTTP_SEC_FETCH_SITE] => same-origin
  31. [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
  32. [HTTP_SEC_FETCH_DEST] => document
  33. [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36
  34. [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
  35. [HTTP_CACHE_CONTROL] => max-age=0
  36. [HTTP_CONNECTION] => close
  37. [HTTP_HOST] => 127.0.0.1
  38. [FCGI_ROLE] => RESPONDER
  39. [PHP_SELF] => /numb/Basic/2020-2-26/a.php
  40. [REQUEST_TIME_FLOAT] => 1582802021.9788
  41. [REQUEST_TIME] => 1582802021
  42. )
  43. [GLOBALS] => Array

RECURSION

)


2. static 静态作用域

先理解下面运行的代码

  1. <?php
  2. function num()
  3. {
  4. $a = 0;
  5. echo 'num() 中 a = ' . $a . ' <br>';
  6. $a++;
  7. }
  8. num();
  9. num();
  10. num();
  11. echo '<hr>';
  12. function num2()
  13. {
  14. static $a = 0;
  15. echo 'num2() 中 a = ' . $a . ' <br>';
  16. $a++;
  17. }
  18. num2();
  19. num2();
  20. num2();

运行结果
image.png

分析: 没用static修饰的变量:每次没有累加 用了static修饰的变量:每次都进行了累加

我们可以得出第一个结论:static可以在函数被重复调用的时候,static变量保留上次执行函数后的结果。

为什么会这样?
**

静态变量: 首先静态变量属于静态存储方式,在内存的静态数据区被分配存储单元。这个区域的数据在程序运行的整个期间,都会占用分配的存储单元(内存地址在此期间不变),直到程序运行结束才会释放占用的存储单元。

我们稍微调整一下代码

  1. <?php
  2. $a = 0;
  3. function num()
  4. {
  5. global $a;
  6. echo 'num() 中 a = ' . $a . ' <br>';
  7. $a++;
  8. }
  9. num();
  10. num();
  11. num();

运行结果
image.png

这也说明了一个问题:**所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。

关于静态变量的小结

  • 我们之所以称之为静态变量,是因为这个变量直到程序运行结束时都会保持最新的值
  • 所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。
  • 属于静态存储方式的变量不一定就是静态变量。 例如:外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。
  • 全局变量和静态变量都是属于静态存储方式

PHP 中的打印输出

1. echo

  • 作用是输出一个或多个字符串,并不会自动换行。
  • echo 不是一个函数而是一个语言结构
  • 并且没有返回值
  • 大小写不敏感
  • 可以与三目运算符结合
  • 可以带括号也可以不带括号,可以单引号包裹也可以双引号包裹。
  • 快捷用法<?= $foo ?>,php.ini 里面启用 short_open_tag 才有效。我个人并不喜欢
  • 另外记住 echo 不能打印数组
  1. <?php
  2. $a = 2;
  3. $b = 1;
  4. echo $a > $b ? 'a > b <br>' : 'a <= b <br>';
  5. ECHO $a > $b ? 'a > b <br>' : 'a <= b <br>';
  6. EchO $a > $b ? 'a > b <br>' : 'a <= b <br>';

运行结果
image.png

2. print_r

  • 打印变量易于理解的信息
  • 除基本的 integer float string 可以按照键值对的形式规范的打印数组
  • 有两个参数,第二个参数是一个可选参数[, bool $return ]. 这个参数默认是false,如果设置为true,将不会打印变量的信息,而是将打印的信息当做是一个string类型的字符串传递。
  1. <?php
  2. $b = array('m' => 'monkey', 'foo' => 'bar', 'x' => array('x', 'y', 'z'));
  3. echo '----1 <br>';
  4. print_r($b, true);
  5. echo '----2 <br>';
  6. print_r($b, false);
  7. echo '<br> ----3 <br>';
  8. $res = print_r($b, true);
  9. echo $res;
  10. var_dump($res);

运行结果

image.png

3. print

  • print 也是语言结构,它不是函数
  • echo 最主要的区别: print 仅支持一个参数,并总是返回 1。
  • 同样大小写不敏感
  • 不可以打印数组中的内容
  • 和 echo 类似,有返回值所以速度慢一点 ```php <?php $arr = [‘a’, ‘b’, ‘c’]; print(“Hello World
    “); print “Hello World
    “; print ‘Hello World
    ‘; print ‘Hello World
    ‘; $res = print ‘Hello World
    ‘; print $res . ‘
    ‘; print $arr . ‘
    ‘; echo $arr . ‘
    ‘;

// 结果如下 Hello World Hello World Hello World Hello World Hello World 1 Array Array

  1. <a name="ZGejP"></a>
  2. #### 4. var_dump
  3. - 输出查看变量用的函数
  4. - 可以显示变量的具体信息,如数据类型和长度
  5. - 非常常用的一种
  6. - 同样的大小写不敏感
  7. - 没有返回值
  8. ```php
  9. <?php
  10. $arr = ['a', 'b', 'c'];
  11. var_dump($arr);
  12. Var_dump($arr);
  13. // 运行结果
  14. F:\phpStudy\PHPTutorial\WWW\Numb\Basic\2020-2-26\a.php:82:
  15. array (size=3)
  16. 0 => string 'a' (length=1)
  17. 1 => string 'b' (length=1)
  18. 2 => string 'c' (length=1)
  19. F:\phpStudy\PHPTutorial\WWW\Numb\Basic\2020-2-26\a.php:83:
  20. array (size=3)
  21. 0 => string 'a' (length=1)
  22. 1 => string 'b' (length=1)

5. var_export

  • 输出或返回一个变量,用字符串表示
  • 和 print_r 类似,同样有第二个可选参数, 默认false ,若果设置为true则不会打印,将结果传递给返回值
  1. <pre>
  2. <?php
  3. $a = array(1, 2, array("a", "b", "c"));
  4. echo '----1----<br>';
  5. var_export($a);
  6. echo '<hr>----2----<br>';
  7. var_export($a, true);
  8. echo '<hr>----3----<br>';
  9. var_export($a, false);
  10. echo '<hr>----4----<br>';
  11. $a = var_export($a, true);
  12. var_export($a);
  13. ?>
  14. </pre>
  15. // 运行结果
  16. ----1----
  17. array (
  18. 0 => 1,
  19. 1 => 2,
  20. 2 =>
  21. array (
  22. 0 => 'a',
  23. 1 => 'b',
  24. 2 => 'c',
  25. ),
  26. )
  27. ----2----
  28. ----3----
  29. array (
  30. 0 => 1,
  31. 1 => 2,
  32. 2 =>
  33. array (
  34. 0 => 'a',
  35. 1 => 'b',
  36. 2 => 'c',
  37. ),
  38. )
  39. ----4----
  40. 'array (
  41. 0 => 1,
  42. 1 => 2,
  43. 2 =>
  44. array (
  45. 0 => \'a\',
  46. 1 => \'b\',
  47. 2 => \'c\',
  48. ),
  49. )'