Только что вышла предварительная версия , несмотря на то, что она должна быть доступна в полной версии в ближайшее время.
Несколько предостережений:
Эта строка добавляется в OnConfiguring для вашего контекста данных:
optionsBuilder.UseLazyLoadingProxies();
Это не проблема ООП, это проблема области действия. $ 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'];
}
. Но этот подход, похожий на композицию, действительно полезен только в том случае, если вы этого не сделаете.