php类可以遍历,关于类:遍历PHP中的类

我有一个用于与数据库交互的包装器。为数据库中的每个表自动生成一个类,这扩展了一个基类,该基类包含用于与数据库进行交互的功能,例如: viewTable,viewForm,getRecordByID ...它的主要目标之一是利用自动完成功能,因此我不必记住字段名等,并使代码更安全且更不易出错。

除了一点点之外,我对它非常满意:在我的代码中,为了生成HTML表单,我使用如下代码:

$objInvoice = new cls__Invoice();

$objInvoice->fldID->Active(true); //Active means it will appear on the form

//and a POST will be expected

$objInvoice->fldCompany_ID->Active(true);

$objInvoice->fldSomeValue->Active(true);

$objInvoice->initForm(); //Read posted variables

echo $objInvoice->viewForm(); //viewForm can be overloaded to suit the project

我可以使用许多其他设置:

$ objInvoice-> fldCompany_ID-> Title('Company Reference');

但是这里是问题开始的地方:

$ objInvoice-> fldSomeValue->的inputType( 'MoneyInput');

我传入输入类型以允许使用特定的Input标记或下拉列表等,也允许以特定方式读取它。例如。" IPAddress"类型实际上显示了4个输入,在它们之间有一个点。因此,在保存到数据库之前,必须先对其进行拆分以进行显示和连接。

同样,这一切都很好,但是在我的基类中间有两个大的丑陋的switch语句。我想找到一个解决方案;

优雅

在代码中允许读取的部分和视图的部分彼此相邻

允许开发人员创建自己的输入类型而不会弄乱核心类。

现在允许我使用自动完成功能:...-> InputType($ objSomething-> MoneyInput);

我想出了一些解决方案,但它们未能通过以上第1点。我怀疑解决方案将是这样的类:

class clsInputBase {

var $InputType;

public function Read($objField) {

$result = $_POST[$objField->VariableName];

return $result;

} //funct

public function Output($objField) {

//Standard code for outputing a normal one

//NB: SIMPLIFIED FOR EXAMPLE!

$result = '

//...

$result .= '/>' ."

";

return $result;

} //funct

} //funct

然后,我将为每种输入类型扩展此类,并根据需要重载两个函数。

然后,真正的问题开始了:我需要找到一种方法来遍历基类中的对象/类,并为开发人员提供一种将自定义对象添加到数组之类的方法。

所以我想我要么需要创建一个类名数组,然后使用$ type ='myclass';来创建该类的对象。 $ instance =新的$ type; (不是很优雅)或创建很多我可能不需要的对象(也不是很优雅)。

对不起,这么久。

有什么建议么?

您正在使用codeigniter框架吗? 然后请在代码中放入codeigniter标签

不。 不使用codeigniter。 我自己的框架更好:)

那你在用哪个框架..

它只是我自己编写的用于开发应用程序的框架。

听起来很酷..:D

谢谢-我可能会在某个阶段将其公开发布。

我将执行以下操作:

// can be extended

class Form

{

// class variable to hold all inputs

// class construct expects form config and an array with inputs

// Methods to create forms, parsing forms

}

// can be extended

class Input

{

// class variables to hold input configuration with default values

// methods to echo, parse and validate inputs

// class construct expects array with single input config

// hooks to manipulate with data before and after all logics

}

然后:

$formParams = array(...);

$formInputs = array(

input configurations

);

$form = new Form($formParams, $formInputs);

$form->initForm();

然后,Form类遍历每个$ formInputs值,并使用相应的配置创建新的Input类对象。

在活动记录类中,当它生成时,可以为每列提供默认输入配置。

现在,扩展它很容易,假设我们需要自定义输入类型:

class CustomInput extends Input

{

//at construct we call parent constuctor and adding our own data or manipulating with old

//if we want to transform data, we can use hooks

//this class objects still will be available at Form class object

}

您可以在输入配置中指定自定义类,也可以摆脱第二个配置数组并手动添加输入。

最后,我们将获得统一的表单类,我们可以立即使用它:

在许多情况下,您甚至可以考虑不重载Input类,而在基类中引入灵活的逻辑,因此它可以接受许多配置选项。

感谢那。 它与我自己想出的非常相似-除了我使用的是添加InputType的方法,然后将其添加到类中的数组中。 我仍然遇到自动补全的问题-但我认为我将只能使用PHP样式的"枚举变量"类来生存

看一下Iterator界面:

class myIterator implements Iterator {

private $position = 0;

private $array = array(

"firstelement",

"secondelement",

"lastelement",

);

public function __construct() {

$this->position = 0;

}

function rewind() {

var_dump(__METHOD__);

$this->position = 0;

}

function current() {

var_dump(__METHOD__);

return $this->array[$this->position];

}

function key() {

var_dump(__METHOD__);

return $this->position;

}

function next() {

var_dump(__METHOD__);

++$this->position;

}

function valid() {

var_dump(__METHOD__);

return isset($this->array[$this->position]);

}

}

$it = new myIterator;

foreach($it as $key => $value) {

var_dump($key, $value);

echo"

";

}

http://www.php.net/manual/de/class.iterator.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值