PHP - 包括 class 一个放在 class 变量中
PHP - Including class an put inside class variable
我在 php 代码中的 class 中写了这个语法
public static function cmp_header() {
?>
<div class="header">
<div class="upside">
<div class="upside-layout layout">
<div class="title">
<span class="logo">
<img src="<?php echo me_url ?>images/websites/logo-meapp.png" alt="">
</span>
<span class="label">MeApp</span>
</div>
<div class="navigation">
<div class="navigation-layout layout">
<?php
if($this->config->something()) {
?>
<div class="masuk no-events menu" atr="redirect/masuk">
<div class="masuk click-events header-button menu" atr="redirect|daftar">Welcome, Irvan Hilmi</div>
</div>
<?php
} else {
?>
<div class="masuk no-events menu" atr="redirect/masuk">
<div class="masuk click-events header-button menu" atr="redirect|daftar">Daftar</div>
</div>
<div class="masuk no-events menu" atr="redirect/masuk">
<div class="masuk click-events header-button menu" atr="redirect|masuk">Masuk</div>
</div>
<?php
}
?>
<div class="# no-events menu" atr="do/toggle-more-menu">
<div class="# click-events header-button menu" atr="do|toggle-more-menu">#</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php
}
public function __construct() {
require_once('config.php');
$this->config = new config();
}
config.php
文件有一个名为 config
的 class,我已经将变量 $config
设为 public
。在 class.
中用 public $config
声明
但问题是,当我尝试使用语句 $this->config
访问变量 $config
并调用 config
class 中的方法时,例如 [=23] =] 像这样的错误。
Fatal error: Uncaught Error: Using $this when not in object context
此外,我已经确保 class 和 config.php
中的方法在 public
范围内。
这里是 config.php
文件
class config {
public function something() {
// the method script here
}
public function __construct() {
// nothing just yet
}
}
有没有可能为什么要这样做?使 class 存储在 class 内的变量中,例如 public $config
?
感谢您的指正和建议。
问题是这样的:
public static function cmp_header() {
这是一个静态方法,因此在该方法内部没有 $this
,因为您可以仅使用 class 名称调用它,而不是在特定对象上调用它。
注意,当你解决这个问题时,你会运行进入另一个问题,那就是你不能嵌套class声明。您应该在文件顶部包含 class 或者 - 更好 - 使用自动加载来加载您需要的 classes。
您不能在任意位置创建 classes。例如,你可以这样做this:
class A{}
function create_b()
{
class B{}
}
...但不是例如this:
class A
{
public function foo()
{
class B{}
}
}
// Fatal error: Class declarations may not be nested
这就是语言的工作原理。
但是,对于您的情况,我怀疑您甚至没有尝试嵌套 classes。将 include
语句移动到文件顶部(或者,更好的是,实现 class 自动加载),这将得到解决。
最后但同样重要的是,cmp_header()
不能同时是静态的和访问实例属性。要么使其成为常规方法,要么完全更改设计并将 config
作为参数传递:
public static function cmp_header(config $config) {
if($config->something()) {
我在 php 代码中的 class 中写了这个语法
public static function cmp_header() {
?>
<div class="header">
<div class="upside">
<div class="upside-layout layout">
<div class="title">
<span class="logo">
<img src="<?php echo me_url ?>images/websites/logo-meapp.png" alt="">
</span>
<span class="label">MeApp</span>
</div>
<div class="navigation">
<div class="navigation-layout layout">
<?php
if($this->config->something()) {
?>
<div class="masuk no-events menu" atr="redirect/masuk">
<div class="masuk click-events header-button menu" atr="redirect|daftar">Welcome, Irvan Hilmi</div>
</div>
<?php
} else {
?>
<div class="masuk no-events menu" atr="redirect/masuk">
<div class="masuk click-events header-button menu" atr="redirect|daftar">Daftar</div>
</div>
<div class="masuk no-events menu" atr="redirect/masuk">
<div class="masuk click-events header-button menu" atr="redirect|masuk">Masuk</div>
</div>
<?php
}
?>
<div class="# no-events menu" atr="do/toggle-more-menu">
<div class="# click-events header-button menu" atr="do|toggle-more-menu">#</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php
}
public function __construct() {
require_once('config.php');
$this->config = new config();
}
config.php
文件有一个名为 config
的 class,我已经将变量 $config
设为 public
。在 class.
public $config
声明
但问题是,当我尝试使用语句 $this->config
访问变量 $config
并调用 config
class 中的方法时,例如 [=23] =] 像这样的错误。
Fatal error: Uncaught Error: Using $this when not in object context
此外,我已经确保 class 和 config.php
中的方法在 public
范围内。
这里是 config.php
文件
class config {
public function something() {
// the method script here
}
public function __construct() {
// nothing just yet
}
}
有没有可能为什么要这样做?使 class 存储在 class 内的变量中,例如 public $config
?
感谢您的指正和建议。
问题是这样的:
public static function cmp_header() {
这是一个静态方法,因此在该方法内部没有 $this
,因为您可以仅使用 class 名称调用它,而不是在特定对象上调用它。
注意,当你解决这个问题时,你会运行进入另一个问题,那就是你不能嵌套class声明。您应该在文件顶部包含 class 或者 - 更好 - 使用自动加载来加载您需要的 classes。
您不能在任意位置创建 classes。例如,你可以这样做this:
class A{}
function create_b()
{
class B{}
}
...但不是例如this:
class A
{
public function foo()
{
class B{}
}
}
// Fatal error: Class declarations may not be nested
这就是语言的工作原理。
但是,对于您的情况,我怀疑您甚至没有尝试嵌套 classes。将 include
语句移动到文件顶部(或者,更好的是,实现 class 自动加载),这将得到解决。
最后但同样重要的是,cmp_header()
不能同时是静态的和访问实例属性。要么使其成为常规方法,要么完全更改设计并将 config
作为参数传递:
public static function cmp_header(config $config) {
if($config->something()) {