Назовите Объект в функции

Только что вышла предварительная версия , несмотря на то, что она должна быть доступна в полной версии в ближайшее время.

Несколько предостережений:

  • Все ваши свойства данных, которые являются чем-то большим, чем простые типы (то есть: любые другие классы / таблицы) должны быть общедоступными виртуальными (по умолчанию они не являются скаффолдингами).
  • Эта строка добавляется в OnConfiguring для вашего контекста данных:

        optionsBuilder.UseLazyLoadingProxies();
    
  • Это (в настоящее время) предварительная версия, поэтому сила может быть с вами.

6
задан Paul Dixon 20 May 2009 в 19:45
поделиться

1 ответ

Это не проблема ООП, это проблема области действия. $ obj не отображается внутри функции go (). Вам нужно либо передать его как параметр, либо ввести его в область действия функции с помощью ключевого слова global (не рекомендуется)

Рекомендуемый способ

$obj = new OBJ();

go('http://www.mysite.com/hello', $obj);

function go( $url, $object )
{
    $array = $object->grabArray($url);
    echo $array['hits'];
}

Не рекомендуемый способ

$obj = new OBJ();

go('http://www.mysite.com/hello');

function go( $url )
{
    global $obj;
    $array = $object->grabArray($url);
    echo $array['hits'];
}

Есть другое решение, похожее на концепцию ООП композиции - вы должны сделать функцию go () ответственной за создание экземпляра OBJ.

go('http://www.mysite.com/hello');

function go( $url )
{
    $obj = new OBJ();
    $array = $obj->grabArray($url);
    echo $array['hits'];
}

Это, вероятно, не идеально, поскольку вы будете создавать новый экземпляр OBJ каждый раз, когда выполняете go (). Вы можете исправить это, "кэшируя" экземпляр OBJ внутри go () с помощью статической переменной

function go( $url )
{
    static $obj;
    if ( is_null( $obj ) )
    {
        $obj = new OBJ();
    }
    $array = $obj->grabArray($url);
    echo $array['hits'];
}

. Но этот подход, похожий на композицию, действительно полезен только в том случае, если вы этого не сделаете.

36
ответ дан 8 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: