Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php类-如何加载一个;模块";仅在需要时才在现有对象中创建对象?_Php_Class_Object - Fatal编程技术网

php类-如何加载一个;模块";仅在需要时才在现有对象中创建对象?

php类-如何加载一个;模块";仅在需要时才在现有对象中创建对象?,php,class,object,Php,Class,Object,好的,我有下面的代码设置,看起来很好: 用户处理程序“模块”: 连接类: class connection { private $dbc; public $user; public function __construct() { $this->dbc = 'connection'; $this->user = new user_handler($this); } public function g

好的,我有下面的代码设置,看起来很好:

用户处理程序“模块”:

连接类:

class connection
{
    private $dbc;

    public $user;

    public function __construct()
    {
        $this->dbc = 'connection';
        $this->user = new user_handler($this);
    }

    public function generic_db_method()
    {
        echo '<p>doing stuff with ' . $this->dbc . '</p>';
    }
}
我的问题是:

是否可以使用
连接
类中的方法仅在需要时创建
\u user
对象

我想的是一种可以这样使用的方法:

$dbc->add_handle('user', 'user_handler');
这将从头创建一个名为
user
的新公共属性,并将其设置为新属性
用户\u处理程序
对象:

// in more detail
public function add_handle($name, $module)
{
    if(!isset($this->/*somehow use $name*/))
    {
        $this->/*somehow use $name*/ = new /*somehow use $module*/();
    }
}
…因此,新的设置方式如下:

$dbc = new connection();
$dbc->add_handle('user', 'user_handler');
$dbc->user->user_table_method();
提前谢谢!(查看PHP5.2及以上版本)

然后你会做和你想的一样的事情:

$dbc = new connection();
$name = 'user';
$module = 'somemodule';
$dbc->add_handle($name, $module);
$dbc->user->user_table_method();
正如我在评论中提到的,由于它是公共的,所以我也将它从$\u user重命名为$user

然后你会做和你想的一样的事情:

$dbc = new connection();
$name = 'user';
$module = 'somemodule';
$dbc->add_handle($name, $module);
$dbc->user->user_table_method();

正如我在评论中提到的那样,我还将它从$\u user重命名为$user,因为它是公共的。

公共变量或方法的开头不应带有下划线。这让人困惑,伙计。我是一个php oop新手,所以请原谅我的困惑lol,请随时告诉我是什么让它如此困惑?:)以下划线开头的命名方法或属性通常用于私有方法或属性,而不是公共方法或属性。请参阅,谢谢你的澄清:)-我更新了这篇文章。你不应该以下划线开始你的公共变量或方法。这让人困惑,伙计。我是一个php oop新手,所以请原谅我的困惑lol,请随时告诉我是什么让它如此困惑?:)以下划线开头的命名方法或属性通常用于私有方法或属性,而不是公共方法或属性。谢谢你的澄清:)-我更新了帖子。这将适用于一个项目。。它需要获取给定的值并处理这些值,否则我将不得不编写几个
add\u handle()
方法,每个可能的处理程序“模块”一个,您有多少个?你可以在add_handle()方法中使用一个开关,也可以创建多个add_handle*方法,每种类型一个。在大多数情况下,你只需要在脚本中有一个数据库句柄,除非你特别需要与两个不同的数据库对话……我对add_handle()应该做什么做了更详细的描述。它需要使用2个提供的参数。另外,让我澄清一下发生了什么事情,
连接
对象包含通用的插入/更新/删除方法。
user\u handle
只包含与user/member表相关的信息,并且有许多帮助器方法专门用于处理该表
user\u handle
中的每个帮助器方法都使用了
连接
对象中的通用访问方法只需取出注释并使用变量即可。应该行得通。这对一个项目有效。。它需要获取给定的值并处理这些值,否则我将不得不编写几个
add\u handle()
方法,每个可能的处理程序“模块”一个,您有多少个?你可以在add_handle()方法中使用一个开关,也可以创建多个add_handle*方法,每种类型一个。在大多数情况下,你只需要在脚本中有一个数据库句柄,除非你特别需要与两个不同的数据库对话……我对add_handle()应该做什么做了更详细的描述。它需要使用2个提供的参数。另外,让我澄清一下发生了什么事情,
连接
对象包含通用的插入/更新/删除方法。
user\u handle
只包含与user/member表相关的信息,并且有许多帮助器方法专门用于处理该表
user\u handle
中的每个帮助器方法都使用了
连接
对象中的通用访问方法只需取出注释并使用变量即可。它应该会起作用。
public function add_handle($name, $module)
{
    if(!isset($this->$name))
    {
        $this->$name = new $module();
    }
}
$dbc = new connection();
$name = 'user';
$module = 'somemodule';
$dbc->add_handle($name, $module);
$dbc->user->user_table_method();