簡體   English   中英

在 php class 中定義一個全局變量

[英]Define a global variable in a php class

我有一個 PHP class 具有迭代 function 如下所示:

<?php

class Helper
{


    public static function get_children($mid)
    {

        ...
        $permission = getPermissionFromDB($mid);
        if ($permission)
            $mid = get_children($mid);
    }

}

這個 function 在每次迭代中都會檢查來自 db 的id權限。 這僅僅意味着我查詢了 db 千次,這使得加載非常慢。 我在想的是,我需要事先從數據庫中獲取所有 id 權限(針對特定用戶),並將權限 id 存儲在一個數組中(如$permissed_ids )。 然后使用數組檢查權限,如下所示:

   <?php

class Helper
{


    public static function get_children($mid)
    {

        ...
        $permission = in_array($mid,$permissed_ids);
        if ($permission)
            $mid = get_children($mid);
    }

}

話雖如此,我不知道將$permissed_ids放在安全的、可在 class 中訪問且特定於用戶的迭代 function 之外的最佳方法是什么。

當任務不簡單時,static 方法可能不是最實用的工具。 無論如何,我知道$permissed_ids是應用程序范圍的,因此它們可以在實例之間共享,而且它們的獲取成本也很高,因此它們應該在實例之間共享。 它們還依賴於$mid ,因此您需要一個 key => value 結構來存儲它們。 這基本上留下了 static 變量作為最明顯的簡單解決方案(static class 屬性或 ZA81259CEF8E95D329 變量方法:

class Foo
{
    private static $a = 'a';
    
    public static function bar()
    {
        static $b = 'b';
        var_dump(self::$a, $b);
    }
}

Foo::bar();

演示

這只是說明語法的一個簡單示例,您當然可以動態設置值,並且如上所述,您需要一個結構,例如關聯數組。

一個更詳細的例子( 在線):

class Foo
{
    private static $permissions = [];

    public static function asProperty($mid)
    {
        if (!isset(self::$permissions[$mid])) {
            self::$permissions[$mid] = uniqid($mid . '_prop_', true);
        }
        echo $mid, ' = ', self::$permissions[$mid], PHP_EOL;
    }

    public static function asVariable($mid)
    {
        static $permissions = [];
        if (!isset($permissions[$mid])) {
            $permissions[$mid] = uniqid($mid . '_var_', true);
        }
        echo $mid, ' = ', $permissions[$mid], PHP_EOL;
    }
}

兩者之間的主要區別在於 class 屬性可以在方法之間共享(如果可見性允許,則可以從其他類訪問)而方法變量不能。

暫無
暫無

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

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