PHP开发日志 ━━ 基础知识:四种不同的变量返回方式该如何调用

最近在给框架升级,其中涉及到古早的缓存系统升级,现在准备区分类型为混合、变量和普通文件,那么变量用什么形式存储到缓存才能给后续开发带来便利和通用性呢?于是就涉及到了本文的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 复制代码
<?php return $a = array(1,2,3); ?>
  1. 行为

    • require 文件时,return 语句会使文件的执行结果作为 require 的返回值。
    • 因为 $a 是文件内部定义的变量,除非返回它,否则外部无法直接访问。
  2. 如何获得数组

    • require 的结果直接是返回的值,即 $a 的值。

    • 示例:

      php 复制代码
      $result = require 'A.php'; // $result = [1, 2, 3]
  3. 注意require 并不会将 $a 导入到调用文件的作用域中。


文件B.php

php 复制代码
<?php $b = array(1,2,3); ?>
  1. 行为

    • 没有 return,文件被 require 时,$b 会在文件本身的作用域中被定义。
    • 但由于它没有被导出,外部文件无法直接访问 $b
  2. 如何获得数组

    • 需要在调用文件中全局定义 $b,因为 require 会将文件代码插入到调用点。

    • 示例:

      php 复制代码
      require 'B.php'; 
      print_r($b); // [1, 2, 3]
  3. 注意$b 变量必须存在于全局作用域中,否则会报未定义的变量错误。


文件C.php

php 复制代码
<?php return array(1,2,3); ?>
  1. 行为

    • 文件的返回值是数组 [1, 2, 3]
    • require 时,返回值会直接作为 require 的结果。
  2. 如何获得数组

    • require 的结果就是数组。

    • 示例:

      php 复制代码
      $result = require 'C.php'; // $result = [1, 2, 3]
  3. 注意:与文件A的行为类似,但更简洁。


文件D.php

php 复制代码
<?php array(1,2,3); ?>
  1. 行为

    • 文件中定义了一个数组,但没有任何变量存储它,也没有返回值。
    • require 时,数组只是在文件中被创建了一次,但没有对调用者产生影响。
  2. 如何获得数组

    • 这种情况下,无法直接通过 require 获取数组,因为它既没有返回值,也没有赋值给任何变量。

    • 示例:

      php 复制代码
      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的方式,因为它最简洁且作用域清晰。

相关推荐
殳翰1 小时前
下服务器端开发流程及相关工具介绍(C++)
开发语言·c++
落寞的星星1 小时前
这个对象就包含了已经转换好的DFA和各种词法分析器运转所需要的参数。下一步,我们就可以用ScannerInfo对象创建出Scanner对象,请看下面的代码:
开发语言·c#
nothing&nowhere2 小时前
用 Python 做问卷数据清洗:无效样本检测与处理实战
开发语言·python·数据清洗·数据处理·问卷星·问卷星脚本·刷问卷
2601_961593422 小时前
Rust 开发环境配置繁琐?RustRover 开箱即用搞定编码调试
开发语言·后端·macos·rust
HZZD_HZZD3 小时前
DL/T 645-2026新国标深度解读与智能电表协议适配实战:从帧结构变化到Java采集器升级的全链路改造方案
java·开发语言
多加点辣也没关系5 小时前
JavaScript|第4章:类型转换
开发语言·javascript
聪慧的水蜜桃5 小时前
【YFIOs】用C#开发硬件之设备上云
开发语言·c#
yqcoder5 小时前
httpOnly 是什么,又有什么用?
开发语言·前端·javascript
wuqingshun3141596 小时前
重写equals而不重写hashCode,会出什么问题?
java·开发语言
飞猪~6 小时前
LangChain python 版本 第一集
开发语言·python·langchain