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();