仓酷云

标题: PHP网页编程之第1次密切接触PHP5(1) [打印本页]

作者: 小女巫    时间: 2015-2-16 00:28
标题: PHP网页编程之第1次密切接触PHP5(1)
我先把我自己学习PHP的过程做一下概括:php5   文章来历:PHPBuilder.com
原作者:Luis Argerich
翻译:erquan
erquan注:自己现还将来得及体验PHP5,只是翻译一篇老外的文章。
以下均由erquan翻译,第1次作这些的工作但愿没有误导人人。有些禁绝的中央请体谅。
人人看如许的行不可,假如行的话,偶就翻译完,不可就翻译了,以免误导了人人,也累哦。。。。:)
转贴时请注明文章来历,感谢:)


PHP5的正式版还没宣布,但咱们可以进修、体验下开辟版给咱们带来的PHP新特征。
本文将集中引见以下3大PHP5新功效:
* 新对象形式
* 布局化异常处置
* 称号空间

在正式入手下手之前,请注重:
*文章中的局部例子用PHP4的办法完成,只是为了加强文章的可读性
*本文所描写的新特征能够会与正式版特征有收支,请以正式版本为准。

* 新对象形式



PHP5新的对象形式在PHP4的基本上做了很大的"晋级",你看起来会很像JAVA:(。
上面的一些文字将对它做一些复杂引见,而且附有小例子让您入手下手体验PHP5的新特征
come on~~:)

* 机关函数 和 析构函数
* 对象的援用
* 克隆对象
* 对象的3种形式:公有、公共和受回护
* 接口
* 虚拟类
* __call()
* __set()和__get()
* 静态成员

机关函数 和 析构函数



在PHP4中,和类名一样的函数被默许为该类的机关器,而且在PHP4没有析构函数的概念。(二泉 注:这点和JAVA一样)
但从PHP5入手下手,机关函数被一致定名为 __construct,并且有了析构函数:__destruct(二泉 注:这点却和Delphi一样,可见PHP5接收了浩瀚的成熟的OO思惟,可C可贺~~):
例1:机关函数和析构函数

<?php
class foo {
  var $x;

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

  function display() {
    print($this->x);
  }

  function __destruct() {
    print("bye bye");
  }
}

$o1 = new foo(4);
$o1->display();
?>

运转完你将看到输入了"bye bye",这是由于类在终止的时分挪用了__destruct()析构函数~~

对象的援用



正如你所晓得的一样,在PHP4中,对一个函数或办法传递一个变量时,实践上是传递了一个copy,除非你用了传址符&来声明
你在做一个变量的援用。在PHP5中,对象老是以援用的体例被指定:
例2:对象的援用

<?php
class foo {
  var $x;

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

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

$o1 = new foo;
$o1->setX(4);
$o2 = $o1;
$o1->setX(5);
if($o1->getX() == $o2->getX()) print("Oh my god!");
?>

(二泉 注:你将看到"Oh my god!"的输入)
克隆对象



如上,假如有时不想失掉对象的援用而想用copy时,怎样办?在PHP5供应的 __clone 办法中完成:
例3:克隆对象

<?php
class foo {
  var $x;

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

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

$o1 = new foo;
$o1->setX(4);
$o2 = $o1->__clone();
$o1->setX(5);

if($o1->getX() != $o2->getX()) print("Copies are independant");
?>

克隆对象的办法在已被使用到良多言语中,所以你不用忧虑它的功能:)。

Private, Public 和 Protected



在PHP4中,你可以在对象的里面操作它恣意的办法和变量--由于办法和变量是公用的。在PHP5援用了3种形式来掌握
对变量、办法的掌握权限:Public(公用的)、Protected(受回护)和Private(公有)

Public:办法和变量可以在恣意的时分被会见到
Private:只能在类的外部被会见,子类也不克不及会见
Protected:只能在类的外部、子类中被会见

例子4:Public, protected and private

<?php
class foo {
  private $x;

  public function public_foo() {
    print("I'm public");
  }

  protected function protected_foo() {
    $this->private_foo(); //Ok because we are in the same class we can call private methods
    print("I'm protected");
  }

  private function private_foo() {
    $this->x = 3;
    print("I'm private");
  }
}

class foo2 extends foo {
  public function display() {
    $this->protected_foo();
    $this->public_foo();
    // $this->private_foo();  // Invalid! the function is private in the base class
  }
}

$x = new foo();
$x->public_foo();
//$x->protected_foo();  //Invalid cannot call protected methods outside the class and derived classes
//$x->private_foo();    //Invalid private methods can only be used inside the class

$x2 = new foo2();
$x2->display();
?>


提醒:变量老是公有模式,直接会见一个公有变量并非一个好的OOP思惟,应当用其他的办法来完成 set/get 的功效


接口



正如你晓得的一样,在 PHP4 中完成承继的语法是"class foo extends parent"。不管在PHP4 仍是在 PHP5 中,都不撑持多重承继即只能从一个类往下承继。 PHP5中的"接口"是如许的一种特别的类:它其实不详细完成某个办法,只是用来界说办法的称号和具有的元素,然后经由过程关头字将它们一同援用并完成详细的举措。

Example 5: 接口
<?php
interface displayable {
  function display();
}

interface printable {
  function doprint();
}

class foo implements displayable,printable {
  function display() {
    // code
  }

  function doprint() {
    // code
  }
}
?>

这对代码的浏览性和了解性长短常有匡助的:读到该类时,你就晓得foo包括了接口displayable和printable,并且必定有print()(二泉 注:应当是doprint())办法和display()办法。不用晓得它们外部是若何完成便可轻松操作它们只需你看到foo的声明。

虚拟类



虚拟类是一种不克不及被实例化的类,它可以像超类一样,可以界说办法和变量。
在虚拟类中还可以界说虚拟的办法,并且在该办法也不克不及在该类是被完成,但必需在其子类中被完成

Example 6: 虚拟类

<?php
abstract class foo {
  protected $x;

  abstract function display();

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


class foo2 extends foo {
  function display() {
    // Code
  }
}
?>


__call()办法



在PHP5时,假如你界说了 __call()办法,当你试图会见类中一个不存在的变量或办法时,__call()就会被主动挪用:
Example 7: __call


<?php
class foo {

  function __call($name,$arguments) {
    print("Did you call me? I'm $name!");
  }
}

$x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>


这个特别的办法被习气用来完成"办法重载",由于你依托一个公有参数来完成并反省这个参数:
Exampe 8:  __call 完成办法重载

<?php
class Magic {

  function __call($name,$arguments) {
    if($name=='foo') {
      if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
      if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
    }
  }

  private function foo_for_int($x) {
    print("oh an int!");
  }

  private function foo_for_string($x) {
    print("oh a string!");
  }
}

$x = new Magic();
$x->foo(3);
$x->foo("3");
?>


__set()办法 和 __get()办法



当会见或设置一个不决义的变量时,这两个办法将被挪用:

Example 9: __set and __get

<?php
class foo {

  function __set($name,$val) {
    print("Hello, you tried to put $val in $name");
  }

  function __get($name) {
    print("Hey you asked for $name");
  }
}

$x = new foo();
$x->bar = 3;
print($x->winky_winky);
?>  学会了PHP,那么学其他的语言,肯定速成,反过来也一样,如果你之前学过其他的语言,那么学PHP肯定快。
作者: 再现理想    时间: 2015-2-16 04:05
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
作者: 飘飘悠悠    时间: 2015-3-2 00:46
实践是检验自己会不会的真理。
作者: 柔情似水    时间: 2015-3-11 01:12
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
作者: 老尸    时间: 2015-3-11 02:00
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者: 若天明    时间: 2015-3-17 00:08
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
作者: 山那边是海    时间: 2015-3-19 09:14
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
作者: 第二个灵魂    时间: 2015-3-27 15:39
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
作者: 莫相离    时间: 2015-3-30 03:18
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 若相依    时间: 2015-4-10 19:07
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: 透明    时间: 2015-4-14 07:10
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 小妖女    时间: 2015-4-21 17:15
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: 灵魂腐蚀    时间: 2015-4-21 17:17
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 愤怒的大鸟    时间: 2015-4-22 03:59
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者: 飘灵儿    时间: 2015-4-24 05:25
Ps:以上纯属原创,如有雷同,纯属巧合
作者: 乐观    时间: 2015-4-26 14:09
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 再见西城    时间: 2015-5-1 06:15
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
作者: 金色的骷髅    时间: 2015-5-12 01:12
做为1门年轻的语言,php一直很努力。
作者: 谁可相欹    时间: 2015-6-27 03:34
Ps:以上纯属原创,如有雷同,纯属巧合
作者: 仓酷云    时间: 2015-7-5 00:22
实践是检验自己会不会的真理。
作者: 变相怪杰    时间: 2015-7-8 13:58
爱上php,他也会爱上你。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2