0

可能重复:
从类中访问全局变量

我想加强我在 PHP 方面的知识。但大多数时候我很难理解范围。我不确定何时在我的函数上使用 $this 和全局声明关键字。

这只是一个示例类,我只是省略了 __construct()

    class myClass{
    public myVariable;

       public function1() {
          $this->myVariable=1;
       }

       public function2(){
          global $myVariable;
          $myVariable=1;
       }
    }

在函数内分配预先声明的变量时,哪一种是最好的方法?我对 PHP 主要出版商的不同书籍感到困惑。我不确定我问的是正确的问题还是相关的问题。

4

3 回答 3

1

首先,正如 Jared Farrish 已经说过的那样,这不是有效的 PHP。它public $myvar而不是public myvar. 变量名总是以 .开头$

在类中声明变量时:

<?php
class A
{
    private $var;
}

如果通过访问该变量将在所有方法中自动可用$this(除非方法是静态的,但这是另一回事)。所以这会起作用:

<?php
class A
{
    private $var;

    public function foo () {
        // This works 
        $this->var = 1;

        // This is a completely different thing and does not change
        // the contents of A::$var
        $var = 1; 
    }
}

现在global完全不同了。在 PHP 中,你不能这样做:

<?php
$global_a = 123;

function myfunc ()
{
    // You wont actually change the value of $global_a with this
    $global_a = 1234;
}
echo $global_a; // still 123

你会认为这会起作用,但全局变量不会自动用于函数。这就是global进来的地方:

<?php 
$global_a = 123;

function myfunc ()
{
    global $global_a;
    $global_a = 1234;
}
echo $global_a; // now it will be 1234

我建议您阅读 PHP 中的变量范围,然后您可以继续阅读 PHP中的 OOP

PHP 是一种非常古怪的语言。仅仅因为某些东西在大多数语言中以某种方式工作并不意味着它可以在 PHP 中工作。大多数时候,它不会。因此,最好尽可能多地教育自己。

希望这可以帮助

于 2013-01-13T12:25:11.347 回答
0

哪个最好通常取决于具体情况。一般来说,最好避免使用全局变量,因为它们会带来不知道它们在哪里使用的风险。

如果变量特定于该类的实例,则使用类变量是一个不错的选择。(不过,您必须为其添加前缀$。即,public $myVariable;)。

如果变量仅与类外的函数和实例相关,则最好将其作为引用传递。这是通过在参数空间中添加一个&之前完成的。$IE:

public function3(&$myVariable) {
    $myVariable = 1;
}

或者只是返回您想要的值并将其设置在函数之外。IE,:

class MyClass {
    public function3() {
        return 1;
    }
}

$myObject = new MyClass();
$myVariable = $myObject->function4();
于 2013-01-13T12:19:13.293 回答
0

尽量避免传递全局变量,因为有很多很好的理由:

  1. 重用脚本的某些部分是不可能的:如果某个函数依赖于全局变量,那么在不同的上下文中使用该函数几乎是不可能的。另一个问题是您不能使用该功能,并在另一个脚本中使用它。

  2. 解决错误要困难得多:跟踪全局变量比非全局变量要困难得多。

  3. 在一年内理解代码将变得更加困难:全局变量使得很难看到变量来自哪里以及它做了什么。

现在你的问题:

在函数内分配预先声明的变量时,哪一种是最好的方法?
您可以在函数内通过值或引用传递它们

按价值

$firstVar = 1;

function abc($firstVar){
    echo $firstVar ; // will give you 1
}

引用

function abc(&$firstVar){
    $firstVar = 3;   // this will give utility to change that variable even
    echo $firstVar ; // will give you 3
}

现在在哪里使用 $this 变量:

$this 用于引用当前对象。例子:

class abc{
    private $firstVar;

    function abc(){
        $this->firstVar = 2;
    }
}
于 2013-01-13T12:33:12.973 回答