最近在给框架升级,其中涉及到古早的缓存系统升级,现在准备区分类型为混合、变量和普通文件,那么变量用什么形式存储到缓存才能给后续开发带来便利和通用性呢?于是就涉及到了本文的php基础知识。
好吧,又是一个无用的知识点~~
文件A.php中<?php return $a = array(1,2,3);?>
文件B.php中<?php $b = array(1,2,3);?>
文件C.php中<?php return array(1,2,3);?>
文件D.php中<?php array(1,2,3);?>
都用require后,调用a、b、c、d,有不同么?
又分别如何获得其数组呢?
这四个文件在用 require
引入时的行为是不同的,具体如下:
文件A.php
<?php return $a = array(1,2,3); ?>
-
行为:
- 当
require
文件时,return
语句会使文件的执行结果作为require
的返回值。 - 因为
$a
是文件内部定义的变量,除非返回它,否则外部无法直接访问。
- 当
-
如何获得数组:
require
的结果直接是返回的值,即$a
的值。- 示例:
$result = require 'A.php'; // $result = [1, 2, 3]
-
注意:
require
并不会将$a
导入到调用文件的作用域中。
文件B.php
<?php $b = array(1,2,3); ?>
-
行为:
- 没有
return
,文件被require
时,$b
会在文件本身的作用域中被定义。 - 但由于它没有被导出,外部文件无法直接访问
$b
。
- 没有
-
如何获得数组:
- 需要在调用文件中全局定义
$b
,因为require
会将文件代码插入到调用点。 - 示例:
require 'B.php'; print_r($b); // [1, 2, 3]
- 需要在调用文件中全局定义
-
注意:
$b
变量必须存在于全局作用域中,否则会报未定义的变量错误。
文件C.php
<?php return array(1,2,3); ?>
-
行为:
- 文件的返回值是数组
[1, 2, 3]
。 - 当
require
时,返回值会直接作为require
的结果。
- 文件的返回值是数组
-
如何获得数组:
require
的结果就是数组。- 示例:
$result = require 'C.php'; // $result = [1, 2, 3]
-
注意:与文件A的行为类似,但更简洁。
文件D.php
<?php array(1,2,3); ?>
-
行为:
- 文件中定义了一个数组,但没有任何变量存储它,也没有返回值。
- 当
require
时,数组只是在文件中被创建了一次,但没有对调用者产生影响。
-
如何获得数组:
- 这种情况下,无法直接通过
require
获取数组,因为它既没有返回值,也没有赋值给任何变量。 - 示例:
require 'D.php'; // 没有任何作用
- 这种情况下,无法直接通过
总结
文件 | 数组如何获得 | 特点 |
---|---|---|
A.php | $result = require 'A.php'; | return 返回 $a 的值,但 $a 不会导入调用作用域。 |
B.php | require 'B.php'; print_r($b); | $b 必须手动访问,且作用域受限。 |
C.php | $result = require 'C.php'; | 简单明了,直接返回数组。 |
D.php | 无法获得 | 数组未存储或返回,无法在调用方访问。 |
如果需要直接在调用方获取数组,推荐使用文件C的方式,因为它最简洁且作用域清晰。