Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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 为什么可以';我不能在方法之外运行类代码吗?_Php_Function_Methods_Static - Fatal编程技术网

Php 为什么可以';我不能在方法之外运行类代码吗?

Php 为什么可以';我不能在方法之外运行类代码吗?,php,function,methods,static,Php,Function,Methods,Static,我听说静态方法在对象尚未实例化或需要调用类中的某个对象时使用 class Show_files{ static private $person = 1; echo Show_files::$person++; } 我想让它显示2,我知道如果我把它放在一个实例或一个方法中,它会工作,但为什么它不能像现在这样工作?你必须把这个echo放在一个方法中。然后在其他地方调用它(例如,您的视图)。注意这一点:您正在尝试在类内部执行代码,但在方法外部执行代码。这是非法的语法。唯一可

我听说静态方法在对象尚未实例化或需要调用类中的某个对象时使用

class Show_files{
    static private $person = 1;     
    echo Show_files::$person++;
}

我想让它显示2,我知道如果我把它放在一个实例或一个方法中,它会工作,但为什么它不能像现在这样工作?

你必须把这个
echo
放在一个方法中。然后在其他地方调用它(例如,您的视图)。注意这一点:

您正在尝试在类内部执行代码,但在方法外部执行代码。这是非法的语法。唯一可以“超出”方法的是属性定义:

class foo {
    static $x = 0; // simple variable creation, fixed values. A-OK
    public $y = 1+1; // illegal - expressions not permitted
    private $z = self::$y++; // double-illegal 
    echo self::$z // illegal - executing code
}

$z定义在两个级别上是非法的-您不能在对象仍在解析/定义时通过读取对象来创建$z,并且不能在属性定义中“执行代码”(即“表达式”)。

因为它与php语法不一致-您必须将其放在方法中。 前

然后显示文件::Show()

将其更改为

class Show_files{
   static private $person = 1;     

   public static function getPersonCount() {
        self::$person++;
        echo self::$person;
        return;
   }

}
叫它

  Show_files::getPersonCount();

因为在类主体中不能有任意语句。它可以工作。但应该在类的函数中执行echo。@ShaifulIslam:-1,不,它不能。这是非法的语法。在类属性定义中不能有表达式。哇,已经-2问了一个简单的问题。@shaif:“应该”和“必须”不一样。“应该”是可选的,这意味着该代码将按-is.工作。好吧,不是一个确切的措辞。您可以在预先加载的任何地方调用类,而不仅仅是在视图/控制器/函数/任何“方法”中。对象中的函数是方法。
  Show_files::getPersonCount();