Получить значение из статической переменной класса в разных файлах PHP

Я пытаюсь получить статическую переменную класса php в разных файлах php. но если установить переменную в testpy.php, тогда переменная в taski.php будет null.

Это testpy.php:

<?php
/**
 * Created by PhpStorm.
 * User: PC1
 * Date: 9/16/2018
 * Time: 3:00 PM
 */
include 'cacheData.php';
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING & ~E_ERROR);
//echo $_POST["firstname"];
cacheData::$cacheArrayFirst = json_decode($_POST["firstname"]);
cacheData::converting(cacheData::$cacheArrayFirst);
echo json_encode(cacheData::$cacheArrayFinal);

это taski.php:

<?php
/**
 * Created by PhpStorm.
 * User: hamed
 * Date: 17/09/2018
 * Time: 12:37
 */
include 'cacheData.php';
sleep(5);
echo json_encode(cacheData::returnValue());

это cacheData.php:

<?php
/**
 * Created by PhpStorm.
 * User: PC1
 * Date: 9/16/2018
 * Time: 4:35 PM
 */

class cacheData
{
    public static $cacheArrayFirst;
    public static $cacheArrayFinal;
    public static function converting($cacheArrayOne){
        if (empty(cacheData::$cacheArrayFinal)){
            cacheData::$cacheArrayFinal=$cacheArrayOne;
        }
    }

    public static function returnValue(){
        return self::$cacheArrayFinal;
    }
}

не совсем понятно - выполняете ли вы эти файлы (testpy и taski) отдельно в разных HTTP-запросах? Если да, то это отдельные контексты выполнения. Каждый раз, когда вы запускаете скрипт, кажется, что он никогда раньше не запускался. Все переменные сбрасываются каждый раз (за исключением особых случаев, таких как переменные сеанса).

ADyson 17.09.2018 10:59

Я вызову taski.php с Android, но Android покажет, что он нулевой

seyed ali ziaei 17.09.2018 13:14

на самом деле я не об этом спрашивал. Но похоже, что вы звоните в testpy из другого места? Как я уже сказал, каждый сценарий PHP запускается отдельно в своем собственном контексте. Как будто других казней никогда не было. Значения переменных не используются совместно в разные периоды выполнения скриптов. Если вы хотите обмениваться данными между контекстами, вам нужно сделать что-то вроде сохранения их в базе данных.

ADyson 17.09.2018 13:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
61
1

Ответы 1

Ни в коем случае нельзя звонить в testpy.php с taski.php. Следовательно, когда выполняется taski.php, код из testpy.php никогда не запускается, поэтому переменные не устанавливаются.

Вы можете, например, включить testpy.php в taski.php:

<?php
include 'cacheData.php';
include 'testpy.php'; // <-Added
sleep(5);
echo json_encode(cacheData::returnValue());

Возможно, вы пытаетесь получить доступ к статическим переменным, установленным предыдущим HTTP-вызовом к testpy.php, из taski.php. sleep может указывать на это. Это не сработает - каждый HTTP-запрос - это новое выполнение PHP-приложения,, поэтому все статические переменные сброшены.

Если вам нужно «сохранить» некоторые значения между запросами, вам необходимо сохранить эти значения в базе данных, на локальном диске или в другом хранилище. Вы также можете рассмотреть возможность использования сеансов.

См. Также: Переменная PHP Persist для всех запросов

Другие вопросы по теме