最近在給框架升級,其中涉及到古早的緩存系統升級,現在準備區分類型為混合、變量和普通文件,那么變量用什么形式存儲到緩存才能給后續開發帶來便利和通用性呢?于是就涉及到了本文的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的方式,因為它最簡潔且作用域清晰。