1. 变量作用域
关于变量作用域这一点,PHP 与绝大多数语言也都不同:默认函数内不能访问函数所在作用域的成员。在 JavaScript 中,我们可以在函数作用域中使用父级作用域中的成员:
var top = 'top variable' function foo () { var sub = 'sub variable' console.log(top) // => `top variable` function bar () { console.log(top) // => `top variable` console.log(sub) // => `sub variable` } bar() } foo()
而在 PHP 中:
<?php $top = 'top variable'; function foo () { $sub = 'sub variable'; echo $top; // => 无法拿到 function bar () { echo $top; // => 无法拿到 echo $sub; // => 无法拿到 } bar(); } foo();
如果需要访问全局变量,可以通过 global 关键字声明:
<?php $top = 'top variable'; function foo () { // 声明在当前作用域中获取全局作用域中的 `$top` global $top; $sub = 'sub variable'; echo $top; // => `top variable` function bar () { // 声明在当前作用域中获取全局作用域中的 `$top` 和 `$bar` global $top, $bar; echo $top; // => `top variable` echo $sub; // => 任然无法拿到,因为 `$sub` 不再全局范围,而是在 `foo` 函数中定义 } bar(); } foo();
2. 超全局变量
http://www.w3school.com.cn/php/php_superglobals.asp
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
这些超全局变量是:
$GLOBALS — 引用全局作用域中可用的全部变量
$_SERVER — 获取服务端相关信息
$_REQUEST — 获取提交参数
$_POST — 获取 POST 提交参数
$_GET — 获取 GET 提交参数
$_FILES — 获取上传文件
$_ENV — 操作环境变量
$_COOKIE — 操作 Cookie
$_SESSION — 操作 Session
本文会介绍一些超全局变量,并会在稍后的博客中讲解其他的超全局变量。
2.1. $GLOBALS
$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。
PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
下面的例子展示了如何使用超级全局变量 $GLOBALS:
<?php $x = 75; $y = 25; function foo () { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } foo(); echo $z; // => 100
3. 常量定义与使用
常量跟变量一样也是一个数据容器,但是不同的是一旦申明过后就不允许被修改。
3.1. 定义常量
定义常量使用的是内置的 define 函数
第一个参数是常量的名称,建议采用全大写字母命名,多个单词下划线分隔
第二个参数是常量中存放的数据,可以是任意类型
第三个参数是常量名称是否区不分大小写,默认 false 区分大小写
<?php // 定义常量使用的是内置的 `define` 函数 // 第一个参数是常量的名称,建议采用全大写字母命名,多个单词下划线分隔 // 第二个参数是常量中存放的数据,可以是任意类型 // 第三个参数是常量名称是否区不分大小写,默认 false 区分大小写 define('SYSTEM_NAME', '阿里百秀'); define('SYSTEM_ENABLE', true);
3.2. 使用常量
<?php // 直接通过常量的名称访问常量 // 与变量不同的是不需要用 $ echo SYSTEM_NAME; echo SYSTEM_ENABLE;
4. 载入其他文件
通常情况下,当一个文件中的代码过长,自然会想到要拆分到多个文件中。随着开发经验的积累,慢慢的会发现,
除了文件过程应该拆分文件,更应该做的事情是根据用途去划分。
不管你是怎样想的,核心问题都是一样:怎么将代码拆分到多个文件中?
PHP 中引入其他 PHP 文件有四种方式:
require
require_once
include
include_once
四种方式的对比:
总结来说:
横向分为两类:require 和 include 两种,区别在于 require 会因为载入文件不存在而停止当前文件执行,而include 不会。
纵向分为两类:xxx 和 xxx_once,区别在于代码中每使用一次 xxx 就执行一次载入的文件,而 xxx_once 只会在第一次使用是执行。
使用层面:
include 一般用于载入公共文件,这个文件的存在与否不能影响程序后面的运行
require 用于载入不可缺失的文件
至于是否采用一次载入(once)这种方式取决于被载入的文件
案例:require
require.php
<?php // // 类似 CSS 的 import 导入文件 // require 'config.php'; // // require 可以用于在当前脚本中载入一个别的脚本文件并且执行他 // // require 在每一次调用时都会载入对应的文件 // echo SYSTEM_NAME; // require 'config.php'; // echo SYSTEM_NAME; // require_once ================================== // require_once 如果之前载入过,不再执行(只执行一次) // 由于类似于 定义常量 定义函数 这种操作不能执行多次 // 所以 require_once 更加合适载入这种文件 require_once 'config.php'; echo SYSTEM_NAME; require_once 'config.php'; echo SYSTEM_NAME;
config.php
<?php /** * 定义公共的配置信息 * 1. 便于维护 * 2. 公共使用 */ define('SYSTEM_NAME', 'HELLO'); define('SYSTEM_VERSION', '1.0.0'); define('DB_HOST', '192.168.110.120');
案例:include
aside.php
<aside> 这是侧边栏1111 </aside>
include.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <!-- require 特点: 一旦被载入的文件不存在就会报一个致命错误,当前文件不再往下执行 --> <!-- include 特点: 载入文件不存在不会报错误(会有警告,警告不用管),当前文件继续执行 --> <?php include 'aside.php'; ?> <main> 这是主要的区域 </main> </body> </html>
5.php常用API
内容太多,见链接:https://yangyongli.blog.csdn.net/article/details/111559480