我自己使用了以下代码,它们都给出了相同的结果。那么为什么我们使用类而不是普通函数,以及类和函数之间有什么区别。
<?php
class MyClass{
public $property = "This is My Class Property";
public function getProperty(){
echo $this->property."<br />";
}
}
$obj=new MyClass();
echo $obj->getProperty();
?>
<?php
function getProp(){
$prop="This is My Class Property";
echo $prop;
}
getProp();
?>
PHP 语言参考包含有关函数和类的详细信息:http://www.php.net/manual/en/langref.php
它还解释了PHP的大多数其他功能。如果想学习PHP,这是最好的起点。
功能
该函数是一组语句(代码行(。
例如以下语句:
$name = 'mary';
$gender = 'girl';
if ($gender == 'girl') {
$line = $name . ' had a little pony.';
} else if ($gender == 'boy') {
$line = $name . ' had a little horse.';
}
echo $line;
可以组合成一个函数,以便可以重用:
getSentence('mary', 'girl');
getSentence('peter', 'boy');
function getSentence($name, $gender) {
if ($gender == 'girl') {
$line = $name . ' had a little pony.';
} else if ($gender == 'boy') {
$line = $name . ' had a little horse.';
}
echo $line;
}
请注意两个函数调用:
getSentence('mary', 'girl');
getSentence('peter', 'boy');
这两个语句在 getSentence 函数中运行整个代码块,并将变量传递给它$name和$gender。第一个功能$name = 'mary'
和$gender = 'girl'
,第二个函数$name = 'peter'
和$gender = 'boy'
。
的主要好处是你已经对代码进行了分组以供重用,允许为函数所需的变量传递不同的值。这些变量称为函数参数。
对代码进行分组的另一个好处是更易于阅读。你本质上是在命名代码块,并赋予它们一个特定的目的。使其易于阅读和记住它的使用。
另一个好处是消除了冗余。您不必多次编写代码块。您只需定义一次,然后多次调用它。这也使得函数代码的编辑会影响对该函数的所有调用 - 这减少了在仅更改一个方面时必须编辑多个位置的错误。
例如:
我们可以确保$name字符串具有大写的第一个字符。
function getSentence($name, $gender) {
$name = ucfirst($name);
if ($gender == 'girl') {
$line = $name . ' had a little pony.';
} else if ($gender == 'boy') {
$line = $name . ' had a little horse.';
}
echo $line;
}
我们只做了一个更改,它影响了对 getSentence(( 的每个函数调用。在这种情况下,两者:
getSentence('mary', 'girl');
和
getSentence('peter', 'boy');
类是一组函数。
class Play {
function getSentence($name, $gender) {
$name = ucfirst($name);
if ($gender == 'girl') {
$line = $name . ' had a little pony.';
} else if ($gender == 'boy') {
$line = $name . ' had a little horse.';
}
echo $line;
}
function getSong($name) {
// code here
}
}
我们所做的只是把
class Play { /** functions here **/ }
围绕一组功能。
这提供了与函数对语句相同的好处,但类对函数的作用相同。
类进一步构建一种称为面向对象编程(OOP(的编程方法,您可以在PHP语言参考链接中阅读更多相关信息。
这会将类定义为对象的模板或定义。对象类似于现实世界的对象,函数称为可以为对象调用的"方法"。
因此,可以将类 Play 视为名为"Play"的对象,方法为 "getSentence" 和 "getSong"。然后,这些方法可以操作对象"Play"的属性或返回有关"Play"的有用信息。这样,Play 中的所有代码都独立于程序中其他位置的代码。
当 Play 中的代码需要其他地方的一些代码才能运行时,可以使用"继承"引入它,这是 OOP 的主要部分。我不会详细介绍这一点,因为这是一个非常广泛的话题。
我建议买一本关于OOP的书,并阅读它,以真正理解为什么你应该使用类和方法以及何时使用它们。
任何函数都可以作为构造函数使用关键字 new 调用,并且该函数的原型属性用于从中继承方法的对象。
函数是用于执行特定任务的指令或程序集。 例如,射击枪支有一组要执行的程序。 举起枪,瞄准等。
但是,这些过程是相互依赖的。 也就是说,举枪意味着没有单独意义。
但是,在类中,您可以创建对象。
在 对象 中,您可以创建例如枪。 这把枪有不同的功能,比如举枪、瞄准。
实际上,对象可以独立存在,并且可以在以后的目的中重用。
class SimpleClass
{
// property declaration
public $var = 'a default value';
// method declaration
public function displayVar() {
echo $this->var;
}
}
所以当你想使用类对象时,你需要声明
$objectSimple = new SimpleClass();
当你想使用类方法时,你需要声明
$objectSimple->displayVar();
如您的示例
<?php
class MyClass{
public $property = "This is My Class Property";
public function getProperty(){
echo $this->property."<br />";
}
}
$obj=new MyClass();
echo $obj->getProperty();
?>
<?php
function getProp(){
$prop="This is My Class Property";
echo $prop;
}
getProp();
?>
是的,你们都会工作。 查看您的样本后,您似乎要求 OOP 与程序。
他们根本没有利弊,IMO。它们只是解决相同问题的不同方法。
在纯粹的过程风格中,数据往往与在其上运行的函数高度分离。
在面向对象的风格中,数据往往带有一系列函数。
在函数式风格中,数据和函数倾向于彼此之间有更多的共同点(如在Lisp和Scheme中(,同时在函数的实际使用方式方面提供了更大的灵活性。算法也倾向于根据递归和组合而不是循环和迭代来定义。
当然,语言本身只影响哪种风格是首选的。
你可以说一个类只是一组函数,但实际上它远不止于此。
将类视为一组用于操作相同数量数据的函数。
假设您从数据库中提取用户。如果成员系统有任何复杂性,则必须在多个页面上分配许多变量。
一个更简单的方法是..
$user = new user(2)[/php) (assuming user is the class, and 2 is the userid it pulls from the databse, your contructor function would populate all of the users information, which is easily grouped together and used like...
[code=php:0]print "Hello ". $user->firstName . " welcome to thiswebsite. Your last login was " . $user->lastLogin
这确实是一个小而愚蠢的例子,但如果你让自己思考一下可能性(这不是唯一的一个,多态性是类的另一个伟大功能(
通常,当您使用一个函数时,您打算从中获取一次信息,然后该函数会忘记它发送给您的数据(除非您正在创建一个站点变量或其中的常量......
如果要继续使用信息,则可能需要创建的类。 例如,客户登录后想要浏览有关其帐户的六个不同页面。 您可能希望创建一个类,以便在客户登录时立即获得有关该客户的信息,而不必不断进行 sql 调用即可获取。
也许在屏幕顶部,您希望输入他们的状态和账单信息。 当他们登录并放入构造函数时,您将获得此信息。 然后,无论他们转到哪个页面,此信息都将很快可用。