如何在PHP嵌套数组/对象

时间:2017-02-21 11:22:40

标签: php function object multidimensional-array

来自javascript,我习惯于将所有函数嵌套在像这样的对象中:

var app = {
    something: {
        something: {
            some_variable:"something",
            something: function() {
                return this.some_variable;
            }
        }
    }
};
console.log(app.something.something.something()); // "something"

这是保持所有功能分类和逻辑命名的好方法(对我而言)。

在PHP中,我一直在使用数组:

$app=[
    "name"=>"my_app",
    "database"=>[
        "password"=>"497624779",
        "connect"=>function(){
            //connect to db here using $GLOBALS["app"]["database"]["password"]
        },
        "update"=>function(){
            //update records, etc
        }
    ],
    "page"=>[
        "data"=>[
            "page_1"=>[
                "title"=>"Home",
                "icon"=>"",
                "etc"=>""
            ],
            "page_2"=>[
                "title"=>"",
                "icon"=>"",
                "etc"=>""
            ],
            "page_3"=>[
                "title"=>"",
                "icon"=>"",
                "etc"=>""
            ]
        ],
        "loading"=>function($page_name){
            return $GLOBALS["app"]["page"]["data"][$page_name]["title"]." is loading...";
        }
    ]
];

这意味着我可以这样做:

$app["database"]["connect"]();
echo $app["page"]["loading"]("page_1"); // "Home is loading..."

我如何将其迁移到使用对象,以便我可以这样做:

$app->database->connect(); // connect function would use $this->password, not GLOBALS
$app->page->loading("page_1");

不幸的是,那里的所有教程都没有显示如何嵌套多个对象,如上面的javascript示例。我喜欢可视化的数组的树状结构,但我找不到这种方式定义对象的方法 - 只有这样的例子:

$app=new stdClass();
$app->database=new stdClass();
$app->database->password="497624779";
//etc

即,根本不是很直观。如果我以这种方式重构我的所有代码,我会迷失它,除非我定期对该对象执行var_dump。

模糊的问题,我知道。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

在PHP中,您应该使用命名空间和类来组织代码。

命名空间:http://php.net/manual/en/language.namespaces.php

\some\name\space\class::staticMethod()

课程&对象:http://php.net/manual/en/language.oop5.php

$obj = \some\name\space\class();
$obj->someMethod();

答案 1 :(得分:-1)

  

不幸的是,那里的所有教程都没有显示如何嵌套   多个对象,比如我上面的javascript示例。

这是因为你无法在PHP中定义嵌套对象。

但是,您可以多次扩展一个类,可以使用namespaces,如果需要多重继承,Traits可以让您这样做。

此外,方法链接也可以通过在类方法结束时返回对象实例来实现。更多信息:How to create a fluent query interface?