【问题标题】:How do declare global variable in PHP class如何在 PHP 类中声明全局变量
【发布时间】:2014-02-19 12:21:35
【问题描述】:
class Auth extends Controller {

    function __constructor(){
        private $pass;
    }
    function Auth()
    {
        parent::Controller();   
        $this->load->library('session');
        $this->load->helper('cookie');
        $this->load->library('email');
    }
    function index(){
            ..........
    }
    function loging(){
                $this->pass = "Hello World";
    }
    function test(){
                 var_dump($this->pass); // this is on the  line 114
    }
}

当我访问测试功能时,我得到了这个错误:

解析错误:语法错误,意外的 T_PRIVATE 在 /var/www/clients/client1/web15/web/application/controllers/auth.php 上 第 6 行

而不是字符串“Hello World”。我想知道为什么 ?谁能帮我这个 ?提前谢谢

【问题讨论】:

  • 在不在其中的方法旁边声明类属性 (private $pass;)。 __constructor() 也应该是 __construct()
  • 想法是:如何更新函数中的私有变量并访问另一个函数中的更新值,当然是在同一个类中
  • 那么@Rob 的回答对我来说很好。

标签: php oop global-variables private


【解决方案1】:

首先,您不是在尝试创建“全局变量”(正如您的标题所暗示的那样),而是创建一个私有成员变量。

为此,您需要在构造函数之外声明私有成员变量:

class Auth extends Controller {

    private $pass;

    function __construct(){
    }

    function auth()
    {
        parent::Controller();   
        $this->load->library('session');
        $this->load->helper('cookie');
        $this->load->library('email');
    }
    function index(){
            ..........
    }
    function loging(){
        $this->pass = "Hello World";
    }
    function test(){
        echo $this->pass;
    }
}

还有:

  • 更正构造函数的名称
  • 选择一个命名约定(例如函数名称的第一个小写字符)并坚持下去。

作为您所问内容的简单答案/示例。试试这个:

<?php

    class Auth {

        private $pass;

        function __construct(){
        }

        function loging(){
            $this->pass = "Hello World";
        }
        function test(){
            echo $this->pass;
        }
    }

    $oAuth = new Auth();
    $oAuth->loging();
    $oAuth->test();

?>

它输出:

C:\>php test.php
Hello World

【讨论】:

  • 现在我收到此错误:致命错误:无法访问第 114 行 /var/www/clients/client1/web15/web/application/controllers/auth.php 中的空属性
  • 我将其值更改为“Hello World”。我不知道,为什么我得到这个错误
  • 现在您在应用程序的完全不同区域的完全不同的代码位中遇到错误。听起来你需要调试你所拥有的东西,如果你找不到答案,他们会提出一个新的 SO 问题。
【解决方案2】:

像这样:

class Example extends CI_Controller
{

  public $variable = "I am Global";

  public function test()
  {
    echo $this->variable; // I am Global
  }

  public function demo()
  {
    echo $this->variable; // I am Global
  }

}

或者在你的情况下使用变量$pass public 而不是private

public $pass;//<==make change here 

并通过$this使用变量

【讨论】:

  • 但是当我在测试函数中修改 $this->variable 并且我想在函数演示中打印修改后的变量时会发生什么?
  • 如果您在任何函数中修改全局变量,其范围将仅保留在该控制器中,当您在另一个控制器中使用它时,它将显示其全局值。
  • 它不是一个全局变量——它是一个公共成员变量。看起来我很迂腐,但如果您要了解面向对象的开发,区别非常重要。
  • 想法是:我想在类中声明一个公共或私有变量。之后,在一个公共函数中,我为该变量分配了一个随机值,我想在同一个类中访问另一个函数,该随机值来自公共或私有变量。我该怎么做?
  • 或者如何更新函数中的私有变量并在另一个函数中访问更新后的值,当然是在同一个类中
猜你喜欢
  • 2012-11-11
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 2020-05-10
相关资源
最近更新 更多