集中php全局变量?

集中php全局变量?,php,scope,global-variables,Php,Scope,Global Variables,我有一个functions.php文件,其中包括以下函数: function head() { global $brand, $brandName, $logo, $slogan, $siteName, $title, $titles, $keyword, $keywords, $description, $descriptions, $bodyclass, $bodyClass, $page; include('_assets/inc/head.php'); } functi

我有一个functions.php文件,其中包括以下函数:

function head() {
    global $brand, $brandName, $logo, $slogan, $siteName, $title, $titles, $keyword, $keywords, $description, $descriptions, $bodyclass, $bodyClass, $page;
    include('_assets/inc/head.php');
}

function foot() {
    global $brand, $brandName, $logo, $slogan, $siteName, $title, $titles, $keyword, $keywords, $description, $descriptions, $bodyclass, $bodyClass, $page;
    include('_assets/inc/foot.php');
}
我需要将globals行复制到
foot()
中,以获取我在foot.php中调用的变量来显示。难道没有一个地方可以让我集中这些全局,所以我只需要在我的站点中放置一次全局行吗


根据杰克的指示,我现在有:

class Page {
    private $context;
    public function __construct(array $context) {
        $this->context = $context;
    }
    public function printHead() {
        extract($this->context);
        include '_assets/inc/head.php';
    }
    public function printFoot() {
        extract($this->context);
        include '_assets/inc/foot.php';
    }
}
$page = new Page(array(
    'brand' => 'myBrand',
    'brandName' => '<span class="brand">'.$brand.' <sup><span aria-hidden="true" class="icon_search"></span></sup></span>',
    'logo' => '<a href="/" class="brand">'.$brandName.'</a>',
    'slogan' => '<span class="slogan">Find A Real Estate Professional</span>',
    'siteName' => $logo.' | Directory of Real Estate Professionals',
    'title' => 'Directory of Real Estate Professionals | '.$brand.'',
    'titles' => array (
        'home' => 'Find A Real Estate Professional | '.$brand.''
    );
        if(isset($titles[$page])){
            $title = $titles[$page];
        }
    'keyword' => ''.$brand.', real estate professionals, real estate directory, real estate agents, realtor directory, real estate brokers, real estate lawyers, real estate insurance agents, real estate appraisers, real estate staging consultants',
    'keywords' => array (
        '' => ''
    );
        if(isset($keywords[$page])){
            $keyword = $keywords[$page];
        }
    'description' => ''.$brand.' is a complete directory of real estate professionals, including agents, brokers, appraisers, insurance agents, stagers, lawyers, and more.',
    'descriptions' => array (
        '' => ''
    );
        if(isset($descriptions[$page])){
            $description = $descriptions[$page];
        }
    'bodyclass' => ' page bbfix',
    'bodyClass' => array (
        'home' => 'home'
    ); 
        if(isset($bodyClass[$page])){
            $bodyclass = $bodyClass[$page];
        }
    'page' => $page
));
$page->printHead();
$page->printFoot();
类页面{
私人背景;
公共函数构造(数组$context){
$this->context=$context;
}
公共函数打印头(){
提取($this->context);
包括“_assets/inc/head.php”;
}
公共函数printFoot(){
提取($this->context);
包括“_assets/inc/foot.php”;
}
}
$page=新页面(数组)(
“品牌”=>“我的品牌”,
“brandName”=>“.$brand.”,
“logo'=>”,
“口号”=>“寻找房地产专业人士”,
“siteName”=>$logo.“|房地产专业人士名录”,
“标题”=>“房地产专业人士名录”.$brand.”,
“标题”=>数组(
“家”=>“找一位房地产专业人士”.$brand.“
);
如果(isset($titles[$page])){
$title=$titles[$page];
}
“关键字”=>“.$brand.”、房地产专业人士、房地产目录、房地产代理、房地产经纪人目录、房地产经纪人、房地产律师、房地产保险代理、房地产估价师、房地产分期顾问、,
'关键字'=>数组(
'' => ''
);
如果(isset($keywords[$page])){
$keyword=$keywords[$page];
}
“description”=>“.$brand.”是房地产专业人士的完整目录,包括经纪人、经纪人、估价师、保险代理人、舞台演员、律师等,
'说明'=>数组(
'' => ''
);
如果(isset($descriptions[$page])){
$description=$descriptions[$page];
}
“bodyclass”=>“第bbfix页”,
“bodyClass”=>数组(
“主页”=>“主页”
); 
如果(isset($bodyClass[$page])){
$bodyclass=$bodyclass[$page];
}
“页面”=>$page
));
$page->printfead();
$page->printFoot();

但是,我的代码有与数组相关的错误:(

是的,PHP中有一个对所有全局变量的集中引用。它被称为

一个关联数组,包含对脚本全局范围内当前定义的所有变量的引用。变量名是数组的键

例如:

$GLOBALS['brand'];
$GLOBALS['logo'];
 // And so on

请不要跳转到类似和同样糟糕的构造;拥有全局状态是非常困难的

也就是说,通过一些小的更改,您可以通过使用对象封装您的状态来改进您的设计:

class Page
{
    private $context;

    public function __construct(array $context)
    {
        $this->context = $context;
    }

    public function printHead()
    {
        extract($this->context);
        include '_assets/inc/head.php';
    }

    // same for foot()
}
要使用它:

$page = new Page(array(
    'brand' => 'foo',
    'brandName' => 'bar',
    // etc
));

$page->printHead();

页面
类在构建时封装了上下文;这个状态是在您的资产被包含到脚本中之前提取的。对于包含的脚本来说,变量一直都是全局的。

总是有
$GLOBALS
,但我认为您可以从一些更好的面向对象代码设计中获益。t他的代码有些吓人:)我半肯定globals是故意让它使用起来有点麻烦,只是为了防止人们不加区别地使用它们。我想
公共函数头()
应该进行绑定(通过
ob.*
)而不是发送输出。因为发送内容是另一种责任。然后它应该像
echo$page->head()一样进行echo@DaveJust当然,你可以这样看它;或者,只需将方法重命名为
printfead()
也可以克服它:)好的,@Jack,我尝试了你的建议并编辑了我的代码,但是当涉及到变量数组时,我有行错误。根据你的例子,我已经用我的新代码更新了我的问题。杰克,我得到的错误是特定于我添加的数组行的。第一个错误是
Parse error:syntax error,意外的“;”,第42行
中的/Applications/XAMPP/xamppfiles/htdocs/mydomain/_assets/functions.php中应为“)”,该行与
相关在代码< >标题>=数组(‘HOLD’=>’找到一个不动产专业人员‘$Br.'');如果(isset($titles[$page]){$title=$titles[$page];}
@thefleenancer fixed parse errors超出了这个答案的范围,我假设您具备使脚本工作的基本技能。