我正在爲測試目的編寫一個簡單的邏輯。當一個動作方法被調用時,我將獲取作爲參數傳遞給動作的id並將其存儲在關聯數組中。我寫了一個靜態函數來處理邏輯。我還有第二個問題,我想檢查id是否已經作爲關聯數組中的鍵存在,如果是,我想增加計數器。但我可以爲這個問題提出另一個問題。這個問題的目的是靜態變量不工作。如何處理函數內部的PHP靜態類變量
class UsersController extends Controller
static $users= Array();
public function show($id)
{
$this::stats($id);
}
private static function stats($id)
{
if( array_key_exists("{$id}", UsersController::$users))
{
UsersController::$users["{$id}"] += 1;
}
else
{
UsersController::$users["{$id}"] = 1;
}
print_r(UsersController::$users);
}
每次訪問不同的用戶www.example.com/users/2或www.example.com/users/1。 print_r語句顯示數組中只存在一個元素。我是否缺少一些oop原理。我用C#編寫了一個類似的代碼,它的工作方式和預期的一樣。
爲什麼你是否將所有內容都包含在引號中?不要使用'「{$ id}」',使用'$ id',這樣更具可讀性。此外,可以使用關鍵字'static'來代替當前的類名稱。這會在以後更容易重構。 – Devon
@Devon:抱歉可能會劫持,但使用'self'還可以嗎? – Kisaragi
@Kisaragi,是的,但這取決於。有時候自我更好。它在擴展類時應用不同。例如:Controller中的self將始終引用Controller。 Controller中的靜態會引用被調用的類(UsersController),允許擴展功能。 – Devon