PHP - 严格的标准 : Accessing static property as non static - Nothing is static?

标签 php class oop

我很迷茫。我已经花几个小时广泛地复习了我的两个类(class)。没有什么是静态的,没有什么是静态引用的,但我无法摆脱这个错误。

A 类文件 (ClassA.php)

<?php

namespace MyProject\A;

require_once "B.php";
use MyProject\B as B;

class A
{

    private $privateVariable;

    public function __construct()
    {

        $b = new B\B();
        $this->privateVariable = $b->something;

    }

}

B类文件(B.php)

<?php

namespace MyProject\B;

class B
{

    public $something;

    public function __construct()
    {

        $this->something = "Some (dynamic) string value";

    }

}

我对类并不陌生,但是我以前从未遇到过这个问题(至少没有静态变量或方法或静态引用)。


我得到的错误是:

Strict Standards: Accessing static property MyProject\B\B::$something as non static in A.php on line (this line: $this->privateVariable = $b->something)

Notice: Undefined property: MyProject\B\B::$something in A.php on line (this line: $this->privateVariable = $b->something)

我想任何阅读本文的人都明白我想将 B 的变量 $something 放入 A 的变量 $privateVariable 中,同时在实例化时将类 B 作为类 A 中的一个实例A类喜欢:

<?php

namespace MyProject\Something;

require_once "A.php";
use MyProject\A as A;

$a = new A\A()
// $a's private variable $privateVariable should be set to "Some (dynamic) string value"

非常感谢有关此问题的任何帮助!


编辑
更改代码以更好地反射(reflect)原始代码(将 use AS 更改为 use as 并更改 use 调用适当类的方式

PHP 版本:5.6
编辑 2
老实说,我不知道发生了什么。

  • 我上传了我的文件到服务器
  • 然后我检查了它们是否已正确上传
  • 我仍然收到那些错误
  • 然后我注释掉上面几行以外的所有代码
  • 我仍然收到错误
  • 然后我取消注释我刚刚注释掉的行(使用 CTRL+Z)
  • 然后我重新上传了文档
  • 我确保它们已正确上传
  • 现在一切正常。

对于这个问题我深表歉意,但我认为它更像是一个错误,而不是实际的代码问题。我只会为此责怪 Godaddy(是的,我知道 Godaddy 是不错的选择讽刺)

最佳答案

在这里,完整的单个文件示例:

namespace MyProject\ClassA {
    use MyProject\ClassB\B;
    class A {
        private $privateVariable;
        public function __construct() {
            $b = new B();
            $this->privateVariable = $b->something;
            print $this->privateVariable;
        }
    }
}
namespace MyProject\ClassB{
class B{
    public $something;
    public function __construct()
    {
        $this->something = "Some (dynamic) string value";
    }
}
}
namespace MyProject\Something {
    use MyProject\ClassA\A;
    $a = new A();
}

测试它。

更新:

您使用:

 use MyProject\A as A;

 $a = new A\A();

但是使用 MyProject\A 指向命名空间而不是类。

所以这是正确的:

use MyProject\A\A as A;

$a = new A();

另一个注意事项使用这个:use\MyProject\A\A with \ 首先。

关于PHP - 严格的标准 : Accessing static property as non static - Nothing is static?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38461880/

相关文章:

Python 创建对象

javascript - Javascript 如何将值从 "super class"传递到 "child class"

PHP "Undefined Index"具有嵌套索引的多维数组

php - amfphp 和 Flex4.5 非常简单的登录系统

php - 来自 cron 脚本的 Mage::getStoreconfig()

c++ - 对象的定义和实例化

c# - 使用 Emailmessage 类检索邮件正文

java - 默认构造函数的隐式 super 构造函数 Num() 未定义。必须定义一个显式的构造函数,这背后的逻辑是什么

php - 自定义联系表单不起作用 Yii2

python - 如何在Python中创建多个类实例?