我是PHP新手,所以这里有一个“基本”问题:
我有一张顾客表:
Table 'customers'
id PRIMARY KEY
name VARCHAR 250
email VARCHAR 1000
is_active ENUM 'n','y'
在脚本中,我需要选择所有活跃的客户(is_active =='y')并向他们发送一封感谢邮件。有一个与上表相关联的业务类,称为类Customers。
我可以在不使用OOP的情况下编写非常简单的东西:
$result = mysql_query("SELECT * FROM customers WHERE is_active = 'y'");
while($arr = mysql_fetch_assoc($result))
send this customer a thank you email...
如果我要使用OOP,我该如何处理上述简单的事情?如果有成千上万的客户,我是否会编写加载数千个客户对象的OO代码,以便向每个客户发送一封电子邮件,如下所示?
$result = mysql_query("SELECT * FROM customers WHERE is_active = 'y');
while($arr = mysql_fetch_assoc($result))
$objCustomer = new Customer($arr['id']); //reload what has already been read from the db??
$objCustomer->sendThankYouEmail();
我上面做错了什么(或愚蠢的)?
答案 0 :(得分:0)
我不会从数据库重新加载它,而是从数组中重新加载:
$objCustomer = new Customer($arr);
$objCustomer->sendThankYouEmail();
在您的Customer对象中,您从阵列加载数据。
另一种方法是执行以下操作(对象属性应与字段名称匹配):
while($objCustomer = mysql_fetch_object($result, 'Customer')) {
$objCustomer->sendThankYouEmail();
}
注意:如果您正在开发新功能,则应使用MySQLI或PDO进行参数化查询。
答案 1 :(得分:0)
如果您真的想工作OOP,请尝试使用Doctrine。
Doctrine 2将关系数据库映射到对象。 你可以说。
// obtaining the entity manager
$entityManager = EntityManager::create($conn, $config);
$customerRepository = $entityManager->getRepository('Customer');
$customers = $customerRepository->findAll();
forLoop(){
$customers[index]->email // To get the email and do whatever you want with the customer object.
}
有了这样的事情,你只需要试着看看它是否适合你。