【问题标题】:C-style Variable initialization in PHPPHP中的C风格变量初始化
【发布时间】:2009-11-17 07:56:48
【问题描述】:

PHP 中是否存在局部变量、私有变量、静态变量和公共变量之类的东西?如果是这样,您能否提供每个示例以及它们的范围如何在类内外以及内部函数中演示?

【问题讨论】:

  • + 静态、私有、公共、类适用于 C++ 而不是 C。

标签: php c++ variables scope


【解决方案1】:

我不了解 C++,但 PHP 是如何工作的:

对于函数范围:

<?php

  $b = 6;

  function testFunc($a){
    echo $a.'-'.$b;
  }

  function testFunc2($a){
    global $b;
    echo $a.'-'.$b;
  }

  testFunc(3);
  testFunc2(3);

?>

输出是

3-
3-6

函数内部的代码只能使用 global 关键字访问函数外部的变量。见http://php.net/manual/en/language.variables.scope.php

关于类:

<?php

class ExampleClass{

  private $private_var = 40;
  public $public_var = 20;
  public static $static_var = 50;

  private function classFuncOne(){
    echo $this->private_var.'-'.$this->public_var; // outputs class variables
  }

  public function classFuncTwo(){
    $this->classFuncOne();
    echo $private_var.'-'.$public_var; // outputs local variable, not class variable
  }

}

$myobj = new ExampleClass();

$myobj->classFuncTwo();
echo ExampleClass::$static_var;
$myobj->classFuncOne(); // fatal error occurs because method is private

?>

输出将是:

40-20
-
50
致命错误:从第 22 行 C:\xampp\htdocs\scope.php 中的上下文 '' 调用私有方法 ExampleClass::classFuncOne()

需要注意的一点:PHP 没有变量初始化,尽管变量被称为已设置或未设置。当一个变量被设置时,它已经被赋予了一个值。您可以使用unset 删除变量及其值。未设置的变量等价于 false,如果将其与所有错误输出一起使用,您将看到 E_NOTICE 错误。

【讨论】:

    【解决方案2】:

    在 PHP 中有静态、本地、私有、公共和受保护的变量。

    然而,在 PHP OOP 实现中有些不同:the manual 会帮助你:

    属性或方法的可见性 可以通过前缀定义 带有关键字 public 的声明, 受保护或私有。

    此外,请查看static keyword documentation

    您可以在此处阅读有关普通变量及其范围的更多信息:http://php.net/manual/en/language.variables.scope.php

    在大多数情况下,所有 PHP 变量只有一个作用域。

    我希望这些链接能够比我更好地向您解释它;-)

    【讨论】:

      【解决方案3】:

      是的,PHP 5 在课堂上包括 static variablesvisibility

      class MyClass
      {
          public static $my_static = 'foo';
          public $public = 'Public';
          protected $protected = 'Protected';
          private $private = 'Private';
      
          public function staticValue() {
             return self::$my_static;
          }
          function printHello()
          {
              echo $this->public;
              echo $this->protected;
              echo $this->private;
          }
      }
      
      $obj = new MyClass();
      echo $obj->public; // Works
      echo $obj->protected; // Fatal Error
      echo $obj->private; // Fatal Error
      $obj->printHello(); // Shows Public, Protected and Private
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多