对于这个问题,我真的很想得到一个易于理解的解释,说明在php中使用类的优势而不仅仅是使用函数。
下面是我目前正在思考的一个简单示例,并且想知道类是否更有效:
假设我已经在php中构建了一个迷你日历小部件。我考虑调用函数miniCal('arrayVars1', 'var2')
。但这可能会在该页面上调用两次。通过在此处使用类,创建新实例,可以使用更少的资源吗?
我应该追求哪个方向,因为我感觉现在这个方向是一堵墙...
类用于将数据表示为对象。如果您要表示类似于用户数据或拍卖竞标的内容,创建User对象或AuctionBid对象可以更轻松地将数据组合在一起,在代码中传递它,并使其更易于理解。这些类将具有属性(数据字段,如数字、字符串或其他对象)以及方法(可以对任何类执行操作的函数)。
类通常不会在性能方面提供任何好处,但它们很少会产生任何负面影响。它们真正的好处在于使代码更清晰。
我建议您阅读PHP5面向对象编程指南和维基百科面向对象编程条目。
自 PHP5 开始,常见的做法是创建充当库的类。这样做可以让您更好地组织功能,并利用类特性(如 __autoload())。
例如,假设您有两个加密和解密数据的函数。您可以将它们封装在一个类中(我们称之为 Encryption),并使它们成为静态函数。然后,您可以像这样使用这些函数(注意不需要初始化(即 $obj = new Encryption)):
$encrypted_text = Encryption::encrypt($string);
并且
$decrypted_text = Encryption::decrypt($string);
这样做的好处有:
使用类是将函数分组的好方法。问题是哪些函数应该归为一类?您可能听说过“低耦合,高内聚”。在这篇文章中,让我们关注高内聚。
假设您有几个函数,并且它们执行某些相关联的计算。就像这样:
function plus1($a){
return $a + 1;
}
function plus2($a, $b){
return $a + $b;
}
function plus3($a, $b, $c){
return $a + $b + $c;
}
function plus4($a, $b, $c, $d){
return $a + $b + $c + $d;
}
将相关的函数分组是有意义的。
class PlusCalculator {
public function plus1($a){
return $a + 1;
}
public function plus2($a, $b){
return $a + $b;
}
public function plus3($a, $b, $c){
return $a + $b + $c;
}
public function plus4($a, $b, $c, $d){
return $a + $b + $c + $d;
}
}
那么什么时候应该使用类而不是函数呢? 答案在于编程范式和风格的使用。 类在面向对象编程中是必要的,但在过程式编程中则不太必要。在纯函数式编程语言中,你没有类。
但在面向对象编程语言中,我会说当函数之间有一定的关联性时,将它们分组为一个类。
mysql_query
都使用正确的连接:class MySQL extends Database
{
public function connect($host, $user, $pass, $database)
{
$this->connection = mysql_connect($host, $user, $pass);
$this->select_db($database);
}
public function query($query)
{
return mysql_query($query, $this->connection);
}
public function select_db($database)
{
mysql_select_db($database);
}
}
也许您想要构建一个表单,您可以创建一个包含输入框等要素的表单对象,并在决定显示它时将其放入表单中:
class Form
{
protected $inputs = array();
public function makeInput($type, $name)
{
echo '<input type="'.$type.'" name="'.$name.'">';
}
public function addInput($type, $name)
{
$this->inputs[] = array("type" => $type,
"name" => $name);
}
public function run()
{
foreach($this->inputs as $array)
{
$this->makeInput($array['type'], $array['name'];
}
}
}
$form = new form();
$this->addInput("text", "username");
$this->addInput("text", "password");
class Person{
public $name;
public $job_title;
// ... etc....
}
创建类的原因在于它们代表具有属性(如名称或职称)和可能具有方法(例如显示表单)的事物。
function addInput($type, $name) { echo '<input type="'.$type.'" name="'.$name.'">'; } addInput("text", "username"); addInput("text", "password");
- Andy Gee<p>
标签。如果数据被用于其他地方,并不需要单独的段落呢? - James基本上,两者都可以完成相同的工作,但是使用类可以更轻松地管理代码。另外,如果我们使用类,则必须创建对象来调用其中定义的函数,而如果我们直接创建函数,则不需要创建对象。