簡體   English   中英

如何在 PHP 的函數中定義局部變量?

[英]How can I define a local variable in a function in PHP?

我有這個代碼:

require_once('../config.php');

function ha(){
    global $user; /* I need this to define local-only access from this function */
    return $user;
}

echo ha();

echo $user; /* Global variable value */

那么如何在函數中定義一個局部變量,該變量將通過內部函數 ha() 訪問?

所以echo ha();的輸出將是存儲在文件config.php 中的值 $user ,最后一行echo $user需要在 echo 上為空...當我在函數 static 中定義 $user 時,我得到一個空值...那么怎么能我在 PHP 中定義了一個從文件config.php讀取的變量的靜態值,並且只訪問函數中的值?

function ha(){
    global $user;
    $user2 = 'abc'; // No prefix whatsoever

    echo $user; // Prints global $user
    echo $user2; // Prints local $user2
}

如何在 PHP 中定義從文件config.php讀取的變量的靜態值,並且只訪問函數中的值?

這都是關於變量范圍的 如果您希望在配置文件中定義一個變量並且只能從函數內部讀取,那么您當前的方法是不正確的。

在主作用域中聲明的任何內容(例如在主作用域中加載的配置文件)都可以從代碼中的幾乎任何位置訪問。 如果您不想通過ha()以外的方式訪問變量,則需要在ha()定義它們。

假設我明白你在這里要求什么,你可以這樣做:

class Private {

    private $user = 'value'; // Declare $user as a private variable

    function ha() {

        echo $this->user;

    }

}

$object = new Private();

echo $object->user; // Returns fatal error
$object->ha(); // Echoes 'value'

有關可見性的更多信息,請參見PHP 文檔

require_once('../config.php');

function ha(){
    $user; /* THIS I NEED TO DEFINE LOCAL ONLY ACCESS FROM THIS FUNCTION */
    return $user;
}

echo ha();

//echo $user; /* (unnecessary) GLOBAL VARIABLE VALUE, same as echoing the result of the function!*/

請參閱有關變量范圍的文檔。 現在不需要第二個echo $user 在函數中聲明的任何未顯式設置為$global變量都不是全局變量。

您正在詢問定義局部變量,但這本身並不能解決您的問題。
為了那些通過搜索到達這里的人,我會回答兩者。

  • 如何在函數中定義局部變量:

PHP 在第一次使用時定義了一個變量。 沒有用於聲明局部作用域的關鍵字。 默認情況下,函數內的所有變量都是局部變量(即使是與另一個全局變量同名的變量)。

“第一次使用”意味着賦值,而不是使用變量作為回報或條件。 如果您不確定返回時使用的變量是否會被賦值(例如在config.php文件中),那么您需要使用所需類型的值對其進行初始化。 例如: $user = ''

  • 在函數的本地范圍內導入外部 config.php 文件

你想:

在函數內定義一個局部變量,只能在該函數的作用域內訪問。 這個局部變量 $user 被分配了一個來自config.php文件的值。
$user 不能從該函數外部可見。

您需要將require_once語句放在該函數中。

如果包含發生在調用文件中的函數內部,則被調用文件中包含的所有代碼都將表現得好像它已在該函數中定義一樣。 http://php.net/manual/en/function.include.php

function ha(){
  static $user;
  require_once('../config.php');
  if (!isset($user)) { $user = ''; } // Only needed if you are not sure config.php will define the $user variable
  return $user;
}

echo ha();

echo $user; // Will output nothing

使用static關鍵字將使函數保持 $user 的值。 這是必需的,因為如果您第二次調用該函數,將不會再次包含文件config.php ( require_once() )。

PHP 具有三個變量作用域,全局、局部和靜態。 Static 與local 不同,但從某種意義上說,它的行為與變量可訪問的位置相同。 函數中的靜態作用域是 PHP 的專長,請閱讀

當我在函數 static 中定義 $user 時,我得到一個空值..

你這樣做,因為當你在函數之外使用require_once() , $user 變量是在全局范圍內定義的。 然后,您使用 $user 在ha函數中定義了另一個$user 變量,而沒有像稍后那樣通過global $user將其聲明為全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM