免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1467 | 回复: 0
打印 上一主题 下一主题

学习php5 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-03 22:19 |只看该作者 |倒序浏览
最近一直在看php5的文章内容
从0开始学习起 介绍class的 属性方法开始 然后到php5的抽象类 静态变量

1.公共 受保护 跟私有成员的区别
class myClass{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function echoT(){
  echo $this->public;
  echo '
'.$this->protected;
  echo '
'.$this->private;
}
}
$Nc=new myClass();
$Nc->echoT();
echo'
public='.$Nc->public;
echo'
public='.$Nc->private;//发上错误 private 跟protected成员都不可以被访问 只可以在本内部使用;而protected还可以在子类中被访问 private不可以。

2.抽象类
  抽象类不可以被实化
  抽象类 可以定义属性 跟方法
abstract class AbstractClass {
var $x=45;
   abstract public function test();//抽象类中的抽象方法中的动作不可以被执行
}
class ImplementedClass extends AbstractClass {
   public function test() {
       echo "ImplementedClass::test() called.\n";
    echo $this->x;
   }
}
/*$o = new ImplementedClass;
$o->test();*/

php5多了这个抽象类具体有何用 在论坛上问了很多人 能说清楚地没有几个。不过从axgle介绍的一篇文章
http://axgle.blogchina.com/259004.html

对类有了进一步的了解 定义一个类 先考虑的是他的业务 而不过程。写程序先考虑的是要做什么 ;而不是考虑要怎么做代码如何写。

3.php5中特有的__call();

//__call 方法 此方法是如果对象中不存在此方法 __call()将会自动调用
//常常用来加载一些过程
class foo {
  function __call($name,$arguments) {
print_r($arguments);
    print('Did you call me? I m '.$name.'!
');
  }
} $x = new foo();
$x->doStuff(45,60);
$x->fancy_stuff();
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");

4.__set 和 __get
这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。
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);

5.静态成员 与方法
在类没有被实化前可以被访问或者试用
class calculator {
  static public $pi = 3.14151692;
  static public function add($x,$y) {
    return $x + $y;
  }
}
$s = calculator::$pi;
$result = calculator::add(3,7);
print("$result");
如果 $ca=new calculator();
echo $ca->result;//此就不可以用 有误
6.异常处理
异常处理是公认的处理程序错误的理想方法,在 Java 及 C++ 中都有这个概念,我们欣喜的看到,在 PHP5 已经加入了这方面的应用。你可以尝试使用 “try” 和 “catch” 来控制程序的错误。
class foo {
  function divide($x,$y) {
    if($y==0) throw new Exception("cannot divide by zero");
    return $x/$y;
  }
}
$x = new foo();
try {
  $x->divide(3,0);   
} catch (Exception $e) {
    echo $e->getMessage();
    echo "n
n";
    // Some catastrophic measure here
}
我们使用了 “try” 来执行花括号中的语句,当有错误发生的时候,代码会把错误交给 “catch” 子句来处理,在 “catch” 子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为现在我们可以把所有的错误信息交给一个对象来处理。

8.名称空间
名称空间对类的分组或函数分组很有用。它可以把一些相关的类或函数给组合到一起,方便以后调用。
名称空间
namespace Math {
  class Complex {
    //...code...
    function __construct() {
      print("hey");
    }
  }
} $m = new Math::Complex();
注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。
文章参考:
http://www.phpe.net/articles/350.shtml


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/9901/showart_108110.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP