在 PHP 中更有效地使用 类?
Using classes much more effectively in PHP?
好吧,假设我有两个文件和一个名为 Users 的 MySQL table 和一个名为 [的 tableSelect.
- index.php
- fucntions.php
用户
ID NAME L_NAME POINTS
0 Jill Jackson 10
1 Jack Wills 90
2 John Doe 30
Select
ID OPTION
0 Points
1 Name
2 LastName
index.php 包含一个简单的 table 和 select,就像这样。
<?php include 'output.php'; ?>
<h3>Sort by: </h3>
<select>
<?php getSelect(); ?>
</select>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Points</th>
</tr>
<tr>
<?php outputData(); ?>
</tr>
</table>
我的 fucntions.php 文件有以下代码:
function outputData() {
try {
$handler = new PDO("mysql:host=$host;dbname=$db", "$user", "$pass");
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e)
{
echo $e->getMessage();
echo 'Sorry, an error has occurred.';
die();
}
$query = $handler->query('SELECT * FROM `Users`');
while($r = $query->fetch(PDO::FETCH_OBJ)) {
echo
'
<td>
<input type="text" value="'.$r->Name.'" >
</td>
<td>
<input type="text" value="'.$r->l_name.'">
</td>
<td>
<input type="text" value="'.$r->points.'">
</td>
';
}
}
function getSelect() {
try {
$handler = new PDO("mysql:host=$host;dbname=$db", "$user", "$pass");
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e)
{
echo $e->getMessage();
echo 'Sorry, an error has occurred.';
die();
}
$query = $handler->query('SELECT * FROM `Select`');
while($r = $query->fetch(PDO::FETCH_OBJ)) {
echo
'
<li>'.$r->option.'</li>
';
}
}
我会使用此代码将数据输出到多个不同的页面。这只是一个非常基本的示例...我有多个不同的函数用于从 tables 输出和插入数据。我的问题是,使用 classes 是否比像我在这里编写裸函数并将其包含在我需要的每个页面上更好的选择?
使用 class 与我目前正在做的相比有什么好处?
我看过各种关于如何构建 classes 的教程,但与我目前所做的相比,我从未真正发现真正需要的好处是什么......
有人可以详细说明吗?
对我来说,使用 classes 的主要需要是帮助
,至少在你给出的场景中是这样
代码的可读性。使用代表现实生活中某些事物的对象,代码的可读性要高得多,而且,您不会将所有功能都放在一个或多个文件中。如果一个函数影响一个 class(f.i。使用它的 class 成员,尽管这是非常相对的),你知道 class.php 是你应该创建该函数的地方并且你应该在哪里找到它。
代码的可维护性。出于同样的原因,代码更易于维护。你知道一个对象应该做什么,你很容易阅读你的代码应该做什么以及在哪里。这有帮助,恕我直言调试。此外,在编程时,您可以更直观地知道哪些数据进入 class 以及可以使用包含该数据的对象的哪个方法。
封装。这个概念在编程时需要付出更多努力,因为您必须注意哪些成员应该可以被其他 classes 或主代码的其他实例访问,但可以防止很多错误。例如,可以防止您正在调试的情况,并且您期望变量的值与实际发生的情况不符......这一切都是因为某处有一段代码改变了该值而你没有甚至意识到。
可重用性。您的 classes 可能会在其他项目中有用,只需进行一些更改(并且很容易找到您需要更改的位置和内容)
当然应该有更多的原因,但这些是我想到的主要原因。顺便说一句,在小型项目或部分项目中使用过程化编程可以更容易、更快甚至更干净。
好吧,假设我有两个文件和一个名为 Users 的 MySQL table 和一个名为 [的 tableSelect.
- index.php
- fucntions.php
用户
ID NAME L_NAME POINTS 0 Jill Jackson 10 1 Jack Wills 90 2 John Doe 30
Select
ID OPTION 0 Points 1 Name 2 LastName
index.php 包含一个简单的 table 和 select,就像这样。
<?php include 'output.php'; ?>
<h3>Sort by: </h3>
<select>
<?php getSelect(); ?>
</select>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Points</th>
</tr>
<tr>
<?php outputData(); ?>
</tr>
</table>
我的 fucntions.php 文件有以下代码:
function outputData() {
try {
$handler = new PDO("mysql:host=$host;dbname=$db", "$user", "$pass");
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e)
{
echo $e->getMessage();
echo 'Sorry, an error has occurred.';
die();
}
$query = $handler->query('SELECT * FROM `Users`');
while($r = $query->fetch(PDO::FETCH_OBJ)) {
echo
'
<td>
<input type="text" value="'.$r->Name.'" >
</td>
<td>
<input type="text" value="'.$r->l_name.'">
</td>
<td>
<input type="text" value="'.$r->points.'">
</td>
';
}
}
function getSelect() {
try {
$handler = new PDO("mysql:host=$host;dbname=$db", "$user", "$pass");
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e)
{
echo $e->getMessage();
echo 'Sorry, an error has occurred.';
die();
}
$query = $handler->query('SELECT * FROM `Select`');
while($r = $query->fetch(PDO::FETCH_OBJ)) {
echo
'
<li>'.$r->option.'</li>
';
}
}
我会使用此代码将数据输出到多个不同的页面。这只是一个非常基本的示例...我有多个不同的函数用于从 tables 输出和插入数据。我的问题是,使用 classes 是否比像我在这里编写裸函数并将其包含在我需要的每个页面上更好的选择?
使用 class 与我目前正在做的相比有什么好处?
我看过各种关于如何构建 classes 的教程,但与我目前所做的相比,我从未真正发现真正需要的好处是什么......
有人可以详细说明吗?
对我来说,使用 classes 的主要需要是帮助
,至少在你给出的场景中是这样代码的可读性。使用代表现实生活中某些事物的对象,代码的可读性要高得多,而且,您不会将所有功能都放在一个或多个文件中。如果一个函数影响一个 class(f.i。使用它的 class 成员,尽管这是非常相对的),你知道 class.php 是你应该创建该函数的地方并且你应该在哪里找到它。
代码的可维护性。出于同样的原因,代码更易于维护。你知道一个对象应该做什么,你很容易阅读你的代码应该做什么以及在哪里。这有帮助,恕我直言调试。此外,在编程时,您可以更直观地知道哪些数据进入 class 以及可以使用包含该数据的对象的哪个方法。
封装。这个概念在编程时需要付出更多努力,因为您必须注意哪些成员应该可以被其他 classes 或主代码的其他实例访问,但可以防止很多错误。例如,可以防止您正在调试的情况,并且您期望变量的值与实际发生的情况不符......这一切都是因为某处有一段代码改变了该值而你没有甚至意识到。
可重用性。您的 classes 可能会在其他项目中有用,只需进行一些更改(并且很容易找到您需要更改的位置和内容)
当然应该有更多的原因,但这些是我想到的主要原因。顺便说一句,在小型项目或部分项目中使用过程化编程可以更容易、更快甚至更干净。