PHP数组与调用类堆叠?
好的,我试着在我的控制器、模型和视图上创建一个PHP数组与调用类堆叠?,php,oop,Php,Oop,好的,我试着在我的控制器、模型和视图上创建一个调用类。但是,当我将类设置为调用类中的数组时,似乎是将数组堆叠在一起(按照调用的顺序),而不是将它们逐个排序 我的意思是: array(1) { ["Controller"]=> object(Controller)#2 (1) { ["classes"]=> array(1) { ["Controller_Pages"]=> object(Controller_Pages)#3 (1
调用类。但是,当我将类设置为调用
类中的数组时,似乎是将数组堆叠在一起(按照调用的顺序),而不是将它们逐个排序
我的意思是:
array(1) {
["Controller"]=>
object(Controller)#2 (1) {
["classes"]=>
array(1) {
["Controller_Pages"]=>
object(Controller_Pages)#3 (1) {
["classes"]=>
array(1) {
["View"]=>
object(View)#4 (2) {
["params"]=>
array(2) {
["Testing"]=>
string(7) "a test."
["lolni"]=>
string(7) "a test."
}
["classes"]=>
array(0) {
}
}
}
}
}
}
}
它似乎在按我所说的顺序排列
以下是Call类:
<?php
class Call {
public $classes = Array();
public function __call($name, $args) {
if(!is_object($this->classes[$name])) {
require_once 'Slave/' . str_replace('_', '/', $name) . '.php';
$this->classes[$name] = new $name();
// to confirm that they are being stacked in the order they are being called
echo $name . "\n\n";
}
return $this->classes[$name];
}
public function dump() {
var_dump($this->classes);
}
}
在我看来,这真的没有问题
这里发生的事情很简单,Controller
扩展了Call
,Controller\u页面
。
因此,当您执行$this->class()时
在控制器
或控制器_页面
中,该方法将像来自控制器一样使用$this->classes
,就像来自控制器
一样
我真的不认为发生这种情况有什么问题,只要代码性感高效,对我来说没问题。如果以后有人引用,下面是我为解决这个问题所做的
我基本上将$classes
设置为static
,并使用self::
引用类:
<?php
class Call {
public static $classes = Array();
public function __call($name, $args) {
if(!is_object(self::$classes[$name])) {
require_once 'Slave/' . str_replace('_', '/', $name) . '.php';
self::$classes[$name] = new $name();
}
return self::$classes[$name];
}
public function dump() {
var_dump(self::$classes);
}
}
array(3) {
["Controller"]=>
object(Controller)#1 (1) {
["classes"]=>
array(0) {
}
}
[0]=>
object(Controller_Pages)#2 (1) {
["classes"]=>
array(0) {
}
}
["View"]=>
object(View)#3 (2) {
["params"]=>
NULL
["classes"]=>
array(0) {
}
}
}
<?php
class Call {
public static $classes = Array();
public function __call($name, $args) {
if(!is_object(self::$classes[$name])) {
require_once 'Slave/' . str_replace('_', '/', $name) . '.php';
self::$classes[$name] = new $name();
}
return self::$classes[$name];
}
public function dump() {
var_dump(self::$classes);
}
}