Require_once 外部变量并与 php 类中的其他函数共享

Posted

技术标签:

【中文标题】Require_once 外部变量并与 php 类中的其他函数共享【英文标题】:Require_once external vars and share those with other funcions in a php class 【发布时间】:2011-02-06 18:21:18 【问题描述】:

我有一个外部文件,其中包含一些需要在我的 php 类中使用的变量,并与我类的所有函数共享:

vars.inc:

<?php
 $a = 1;
?>

class.php:

<?php
 class A
  public function __construct()
   require_once("vars.inc");
  
  public function aB
   echo $a;
  
 
?>

但它不起作用:$a var 未定义

我该怎么办?

谢谢大家

【问题讨论】:

【参考方案1】:

函数中的变量只存在于局部范围内,除非你将它们分配给类变量。

例如,如果您在包含的页面中有这个:

<?php
$myvariable = 'hello';
?>

那么您的班级应该使用$this 将其分配给一个班级变量。

我的变量 = $我的变量; 公共函数 aB 回声 $myvariable; ?>

有关变量范围的更多信息,请参阅manual。

【讨论】:

谢谢,它可以工作,但是我们必须通过 $this->var 检索 var。你好!【参考方案2】:

这通常是一种不好的做法。通过构造函数或方法将变量提供给类,或者创建一个包含变量的静态类或将保存这些值的全局可访问变量。这取决于您的代码以及您正在尝试执行的操作。

【讨论】:

【参考方案3】:

这是一个范围问题。也许这样会更好:

<?php
 class A
  protect $a;
  public function __construct()
   require_once("vars.inc");
   $this->a = $a;

  
  public function aB
   echo $this->a;
  
 
?>

【讨论】:

-1。这不仅不起作用(在 __construct() 发生后 $a 消失),而且它鼓励对全局变量的不良使用。包含的页面继承了它包含的范围,除非您在包含的页面中定义函数,在这种情况下,这些函数是全局的。另外,没有必要贬低我的评论。 你很快就投了反对票。如果您愿意等待,您会看到我扩展了我的答案并提供了更好的选择。 但是你的初始代码是错误的。当您在 __construct 中需要它时,它会成为构造的局部变量。要使您的第一个代码工作,必须在类之外需要 vars.inc 文件

以上是关于Require_once 外部变量并与 php 类中的其他函数共享的主要内容,如果未能解决你的问题,请参考以下文章

我认为我做错了(PHP类创建和标志等)

php require_once 文件路径中的变量

没有邮件类 require_once php

PHP 检查 require_once() 内容是不是为空

PHP - require_once 和类继承问题

PHP require() 或 include() 并调用类变量?