Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使变量可用于所有类、方法、函数和包含,就像$\u POST一样_Php_Oop_Scope - Fatal编程技术网

Php 使变量可用于所有类、方法、函数和包含,就像$\u POST一样

Php 使变量可用于所有类、方法、函数和包含,就像$\u POST一样,php,oop,scope,Php,Oop,Scope,这个问题似乎很简单,但我在任何地方都找不到答案 在php脚本/文件的开头,我想创建一个变量 $variable = 'this is my variable'; 我希望这个变量可以在整个脚本中使用,以便所有类、方法、函数、包含的脚本等都可以简单地将这个变量作为$variable调用 Class MyClass { public function showvariable() { echo $variable; } } $\u会话、$\u POST、$\u GET变量的行

这个问题似乎很简单,但我在任何地方都找不到答案

在php脚本/文件的开头,我想创建一个变量

$variable = 'this is my variable';
我希望这个变量可以在整个脚本中使用,以便所有类、方法、函数、包含的脚本等都可以简单地将这个变量作为$variable调用

Class MyClass
{
  public function showvariable()
  {
     echo $variable;
  }
}
$\u会话、$\u POST、$\u GET变量的行为都是这样的。我只需编写一个方法并使用$\u POST,它就会工作。但是如果我使用$variable,我在脚本开始时定义了它,它会说“注意:未定义的变量:variable in…”当我编写一个函数时,它甚至会说它,而不是一个类方法

我试着写作

global $variable = 'this is my variable';
但是脚本不会加载。。。 “HTTP错误500(内部服务器错误):服务器尝试完成请求时遇到意外情况。”

如何才能使变量像$\u POST一样真正可以全局访问?


为什么我需要这个?我特别计划将其用作表单标记。在页面顶部,我将表单令牌生成为$token,在页面底部,我将其存储在会话中。在处理任何表单之前,我会检查会话令牌是否与POST令牌匹配。。。由于我经常在页面上有多个表单(顶部导航中的登录表单和主体中的注册表单),我只想方便起见,在每个表单上调用$token。有时,我的formelements是由类或函数生成的,但它们不识别变量,并且说它没有定义。

我找到了它…-。-我想这很容易

我必须使用

$GLOBALS['variable'];
刚刚找到它。。。最后

编辑大约8个月后:

我刚学会常数

define('name', 'value');
他们就是不能被重新分配。。。 我想我也可以用这个!

您需要声明全局才能在任何功能范围内访问它:

在脚本的顶部:

global $var;
$var= "this is my variable";
在你们班

...
public function showvariable(){
    global $var;
    echo $var;
}
...

在PHP中,全局变量必须在使用它们的每个函数中声明为全局变量。见:


也就是说,全局变量通常是个坏主意,在大多数情况下,有一种方法可以避免使用它们。

只需在任何类或函数之外定义一个变量即可。然后在任何类或函数中使用关键字
global

<?php

// start of code

$my_var = 'Hellow Orld';

function myfunc() {
  global $my_var;
  echo $my_var; // echoes 'Hellow Orld';
}

function myOtherFunc() {
  var $my_var;
  echo $my_var; // echoes nothing, because $my_var is an undefined local variable.
}


class myClass {

  public function myFunc() {
    global $my_var;
    echo $my_var; // echoes 'Hellow Orld';
  }

  public function myOtherFunc() {
    var $my_var;
    echo $my_var; // echoes nothing.
  }

}

myFunc(); // "Hellow Orld"
myOtherFunc(); // no output
myClass->myFunc(); // "Hellow Orld"
myClass->myOtherFunc(); // no output

// end of file
?>


你所说的“但是脚本不会加载…”是什么意思?这取决于上下文。在什么情况下需要全局值?您正在破坏oop的封装。不要使用全局变量。它们使代码难以测试和调试。没有他们,你可以完成你想做的事情。谢谢你的回答。我也发现了这篇文章,但它指的是在函数或类中处理或创建变量之后如何访问这些变量。我的问题是,我想访问函数或类中的变量,而该变量在该函数被声明之前就已经被声明了。谢谢你的回答!虽然这非常有效,但我正在寻找一种更方便的方法,在这里我不必每次编写函数时都提到这个变量。。。我只是希望它在那里,如果我需要它,就给它打电话,如果我不需要它,就不要提它。好吧,globals在PHP中的工作方式(除非你要使用$globals),你需要提一下它。如果你不打算使用它,你不需要提及它,就这么简单。奇怪,但这对我来说不起作用,因为我正在尝试对脚本中的所有函数使用某种常量。请注意,对于大型代码库,不建议使用全局变量,因为它们使得孤立地测试程序的部分非常困难。相反,如果您没有全局变量并使用依赖项注入,那么测试程序的小部分就变得很容易了。@ButtleButkus您如何使用依赖项注入轻松地使$username这样的变量随处可用?@garek007它不必处处可用。Google“编码中关注点的分离”。使用OOP,您可能会有一个包含$username的“user”对象,并将该对象注入到您的“page”对象或类似对象中。然后使用“$user->getUsername()”在页面上向用户显示用户名,例如。@ButtleButkus我明白了。我熟悉关注点分离,但依赖注入对我来说仍然很困难。我看到它是按照您在框架中描述的方式完成的。这才是我真正想要的。我认为在Symfony中,它似乎“总是存在”,但我只是不确定它是如何做到的。我可能需要创建一个用户类,因为目前我没有用户类。