我不知所措。我已经把我的两节课复习了好几个小时了。没有任何东西是静态的,没有任何东西被静态引用,但我无法摆脱这个错误。
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";
}
}
我对类并不陌生,但我以前从未遇到过这个问题(至少没有静态变量、方法或静态引用)。
我得到的错误是:
严格标准:在线访问A.php中的静态属性MyProject''B''B::$something作为非静态属性(此行:
$this->privateVariable = $b->something
)
和
注意:未定义的属性:MyProject''B''B::$something in A.php on line(此行:
$this->privateVariable = $b->something
)
我想任何读过这篇文章的人都明白,我想把B的变量$something
变成A的变量$privateVariable
,同时在实例化A类时将类B保持为类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"
非常感谢有关此问题的任何帮助!
编辑
更改代码以更好地反映原始代码(将
use AS
更改为use as
并更改调用适当类的方式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();
但是use MyProject'A
指向的是一个命名空间而不是一个类。
所以这是正确的:
use MyProject'A'A as A;
$a = new A();
另一个注释使用了这个:use 'MyProject'A'A
和'
在第一位。
我认为您的名称空间不正确。我敢打赌,PHP无法实例化该类,并假设您是静态调用它的。我清理了名称空间,创建了一个巨大的文件,它运行得很好
namespace MyProject'ClassB;
class B
{
public $something;
public function __construct()
{
$this->something = "Some (dynamic) string value";
}
public function getStr() {
echo $this->something;
}
}
namespace MyProject'ClassA;
use 'MyProject'ClassB'B as B;
class A
{
private $privateVariable;
public function __construct()
{
$b = new B();
$this->privateVariable = $b->something;
$b->getStr();
}
}
namespace MyProject'Something;
use 'MyProject'ClassA'A as A;
$a = new A();
有一点值得注意:你写的不是use ... AS ...
,而是use ... as ...
。AS应该是所有较低的情况。因此则正确的CCD_ 12应该是:CCD_。下面的代码摘录将说明这些要点。
<?php
namespace MyProject;
require_once "ClassB.php";
use MyProject'B as cB;
class A {
private $privateVariable;
public function __construct() {
$b = new cB();
$this->privateVariable = $b->getSomething();
}
}
?>
<?php
namespace MyProject;
class B{
public $something;
public function __construct(){
$this->something = "Some (dynamic) string value";
}
// YOU MAY WANT TO CREATE A FUNCTION TO GET THE SOMETHING
public function getSomething(){
return $this->something;
}
}
或者使用混叠。。。。
<?php
namespace MyProject'ClassA;
require_once "ClassB.php";
use MyProject'ClassB as cB;
class A {
private $privateVariable;
public function __construct(){
$b = new cB'B();
$this->privateVariable = $b->getSomething();
}
}
?>
<?php
namespace MyProject'ClassB;
class B{
public $something;
public function __construct(){
$this->something = "Some (dynamic) string value";
}
// YOU MAY WANT TO CREATE A FUNCTION TO GET THE SOMETHING
public function getSomething(){
return $this->something;
}
}
要运行代码(第一个示例-没有别名)::
<?php
namespace MyProject'Something;
use MyProject'A as A;
require_once "A.php";
require_once "B.php";
$a = new A();
var_dump($a);
// PRODUCES:::
object(MyProject'A)[1]
private 'privateVariable' => string 'Some (dynamic) string value' (length=27)
在这里自己测试一下。