如何在另一个类中使用php类

LJK*_*JKS 2 php

我搜索了很多答案,但只找到了一个问题,即是否可以在另一个班级一个类和类似的东西.

所以有第一个文件,它是:

文档1:

class MyClass1 {

    private $myAttribute1;
    __construct(){
        this->myAttribute1 = 'blabla';
    }
}
Run Code Online (Sandbox Code Playgroud)

现在打电话给同一份文件

$myObject1 = new MyClass1();
Run Code Online (Sandbox Code Playgroud)

在NetBeans中完全正常工作.

同时当我构建另一个文档时,我们称之为Document2,并在那里构建另一个类MyClass1,Netbeans告诉我有一个问题:

书2:

myClass2 {
    $myAttribute2 = new myClass1(); 
}
Run Code Online (Sandbox Code Playgroud)

所以这在我的NetBeans中不起作用,只是告诉我'意想不到的新'.我如何使用MyClass1,myClass2因为这种方式不起作用?

Mar*_*c B 5

PHP只允许某些表达式用作类属性的初始化值:

class foo {
    $x = 7; //fine, constant value
    $y = 7+7; // only fine in recent PHPs
    $z = new bar(); // illegal in all PHP versions
}
Run Code Online (Sandbox Code Playgroud)

7+7版本仅在最近的PHP版本中受支持,并且允许的唯一表达式是那些在编译时可以完全计算其结果值的表达式.由于new无法在编译时执行,仅在执行时,它是一个彻头彻尾的永久非法表达.

这意味着对于只能在运行时计算的"复杂"表达式,您必须在构造函数中执行该表达式:

class foo {
    public $z;
    function __construct(){ 
         $z = new bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 因为php无法及时旅行.考虑像`public $ foo = $ GLOBALS ['bar']`这样的东西.无论什么代码创建的全局`$ bar`变量可能还没有执行,那么应该将什么值分配给`$ foo`?一旦你进行了变量赋值,就没有"你记忆"你所分配的值来自哪里,并且PHP不会追溯性地"填充"占位符值.或者你可能有`public $ foo = file_get_contents('文件尚不存在')`. (2认同)