仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1793|回复: 19
打印 上一主题 下一主题

[学习教程] PHP编程:PHP中完成面向对象编程(上)

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:29:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。编程|对象   这篇文章引见在PHP的面向对象编程(OOP)。我将演示若何用面向对象的概念编出较少的代码但更好的法式。祝人人好运。

  面向对象编程的概念对每个作者来讲都有分歧的意见,我提示一下一个面向对象言语应有的器材:

   - 数据笼统和信息埋没
   - 承继
   - 多态性

  在PHP中利用类停止封装的举措:

class Something {
// In OOP classes are usually named starting with a cap letter.
var $x;

function setX($v) {
// Methods start in lowercase then use lowercase to seprate
// words in the method name example getValueOfArea()
$this->x=$v;
}

function getX() {
return $this->x;
}
}

?>
  固然你可以用你本人的举措,但有一个尺度老是好的。

  PHP中类的数据成员利用 "var" 界说,数据成员是没有类型直到被赋值。一个数据成员多是一个 integer、数组、结合数组(associative array)或乃至对象(object). 办法在类里界说成函数,在办法里存取数据成员,你必需利用$this->name 如许的举措,不然对办法来讲是一个函数的部分变量。

  利用 new 来创立一个对象

$obj = new Something;
  然后利用成员函数

$obj->setX(5);
$see = $obj->getX();
  setX 成员函数将 5 赋给对象(而不是类)obj 中成员变量, 然后 getX 前往值 5.

  你也能够用对象援用来存取成员变量,例如:$obj->x=6; 但是,这纷歧种好的面向对象编程的办法。我保持你应利用成员函数来设置成员变量的值和经由过程成员函数来读取成员变量。假如你以为成员变量是不成存取的除利用成员函数的举措,你将成为一个好的面向对象法式员。 但不幸的是PHP自己没有举措声明一个变量是公有的,所以答应糟的代码存在。

  在 PHP 中承继利用 extend 来声明。

class Another extends Something {
 var $y;
 function setY($v) {
  // Methods start in lowercase then use lowercase to seperate
  // words in the method name example getValueOfArea()
  $this->y=$v;
 }

 function getY() {
  return $this->y;
 }
}

?>
  如许类 "Another" 的对象具有父类的所用成员变量及办法函数,再加上本人的成员变量及成员函数。如:

$obj2=new Another;
$obj2->setX(6);
$obj2->setY(7);
  多重承继不被撑持,所以你不克不及让一个类承继多个类。

  在承继类中你可以从头界说来重界说办法,假如咱们在 "Another" 从头界说 getX,那末咱们不再能存取 "Something" 中的成员函数 getX. 一样,假如咱们在承继类中声明一个和父类同名的成员变量,那末承继类的变量将埋没父类的同名变量。

  你可以界说一个类的机关函数, 机关函数是和类同名的成员函数,在你创立类的对象时被挪用。

class Something {
 var $x;

 function Something($y) {
  $this->x=$y;
 }

 function setX($v) {
  $this->x=$v;
 }

 function getX() {
  return $this->x;
 }
}

?>
  所以可以用以下办法创立对象:

$obj=new Something(6);
  机关函数主动赋值 5 给成员变量 x, 机关函数和成员函数都是通俗的PHP函数,所以你可使用缺省参数。

function Something($x="3",$y="5")
  然后:

$obj=new Something(); // x=3 and y=5
$obj=new Something(8); // x=8 and y=5
$obj=new Something(8,9); // x=8 and y=9
  缺省参数的界说办法和 C++ 一样,因而你不克不及传一个值给 Y 但让 X 取缺省值,实参的传递是从左到右,当没有更多的实参时函数将利用缺省参数。

  只要当承继类的机关函数被挪用后,承继类的对象才被创立,父类的机关函数没有被挪用,这是PHP分歧其他面向对象言语的特色,由于机关函数挪用链是面向对象编程的特色。假如你想挪用基类的机关函数,你不能不在承继类的机关函数中显式挪用它。如许它能任务是由于在承继类中父类的办法全体可用。

function Another() {
$this->y=5;
$this->Something(); //explicit call to base class constructor.
}

?>
  在面向对象编程中一种好的机制是利用笼统类,笼统类是一种不克不及实例化而是用来给承继类界说界面的类。设计师常常利用笼统类来强迫法式员只能从特定的基类来承继,所以就可以肯定新类有所需的功效,但在PHP中没有尺度的举措做到这一点,不外:

  假如你在界说基类是需求这个特色,可以经由过程在机关函数中挪用 "die",如许你就能够确保它不克不及实例化,如今界说笼统类的函数并在每一个函数中挪用 "die",假如在承继类中法式员不想重界说而直接挪用基类的函数,将会发生一个毛病。

  另外,你需求确信由于PHP没有类型,有些对象是从基类承继而来的承继类创立的,因而增添一个办法在基类来分辨类(前往 "一些标识")并验证这一点,当你收到一个对象作为参数派上用处。 但关于一个无赖法式没用举措,由于他可以在承继类中重界说此函数,凡是这类举措只对怠惰的法式员见效。固然,最好的举措是避免法式接触到基类的代码只供应界面。

  重载在PHP中不被撑持。在面向对象编程中你可以经由过程界说分歧参数品种和几何来重载一个同名成员函数。PHP是一种松懈的类型言语,所以参数类型重载是没有效的,一样参数个数分歧的举措重载也不克不及任务。

  有时分,在面向对象编程中重载机关函数很有效,所以你能以分歧的体例创立分歧的对象(经由过程传递分歧的参数个数)。一个玲珑门可以做到这一点:

class Myclass {
function Myclass() {
$name="Myclass".func_num_args();
$this->$name();
//Note that $this->$name() is usually wrong but here
//$name is a string with the name of the method to call.
}

function Myclass1($x) {
code;
}
function Myclass2($x,$y) {
code;
}
}

?>
  经由过程这类举措可以局部到达重载的目标。

$obj1=new Myclass(1); //Will call Myclass1
$obj2=new Myclass(1,2); //Will call Myclass2
  感到还不错!
  即使你理解不了PHP,但是也必须先跟它混个脸熟,看,一遍遍的看,看的同时一边琢磨,一边按照它所教的打代码,即使你搞不清楚那些代码到底是干嘛的,但是起码你应该找找感觉。
精灵巫婆 该用户已被删除
沙发
发表于 2015-2-4 13:13:47 | 只看该作者
爱上php,他也会爱上你。
飘飘悠悠 该用户已被删除
板凳
发表于 2015-2-5 23:02:07 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
若天明 该用户已被删除
地板
发表于 2015-2-11 19:06:28 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
小妖女 该用户已被删除
5#
发表于 2015-2-13 06:07:27 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-1 18:54:10 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
蒙在股里 该用户已被删除
7#
发表于 2015-3-7 14:45:43 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
乐观 该用户已被删除
8#
 楼主| 发表于 2015-3-10 12:42:58 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
第二个灵魂 该用户已被删除
9#
发表于 2015-3-17 07:08:08 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
海妖 该用户已被删除
10#
发表于 2015-3-24 00:32:31 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
老尸 该用户已被删除
11#
发表于 2015-3-27 00:09:46 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
活着的死人 该用户已被删除
12#
发表于 2015-4-1 03:34:51 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
山那边是海 该用户已被删除
13#
发表于 2015-4-3 01:49:05 | 只看该作者
实践是检验自己会不会的真理。
深爱那片海 该用户已被删除
14#
发表于 2015-4-7 06:57:26 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
再现理想 该用户已被删除
15#
发表于 2015-4-10 07:10:03 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
兰色精灵 该用户已被删除
16#
发表于 2015-4-16 00:13:01 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
柔情似水 该用户已被删除
17#
发表于 2015-4-21 16:29:48 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
若相依 该用户已被删除
18#
发表于 2015-5-2 03:23:25 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
变相怪杰 该用户已被删除
19#
发表于 2015-5-10 19:10:30 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
20#
发表于 2015-6-11 13:23:02 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 14:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表