php类和对象(一)

前言:如果你学过java这里的类和对象将很好理解,简单的说就是把现实中的一类事物用一个个类或对象来表示。当指具体某个事物比如具体某个桌子的时候就是一个类实例。

每个类的定义都以关键字 class 开头,后面跟着类名,可以是任何非 PHP 保留字的名字。后面跟着一对花括号,里面包含有类成员和方法的定义。伪变量 $this 可以在当一个方法在对象内部调用时使用。$this是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。试试下面的代码

01 class A
02 {
03     function foo()
04     {
05         if (isset($this)) {
06             echo '$this is defined (';
07             echo get_class($this);
08             echo ")\n";
09         } else {
10             echo "\$this is not defined.\n";
11         }
12     }
13 }
14  
15 class B
16 {
17     function bar()
18     {
19         A::foo();
20     }
21 }
22  
23 $a = new A();
24 $a->foo();
25 A::foo();
26 $b = new B();
27 $b->bar();
28 B::bar();

和你想的一样么,可以这样理解”->”是具体某个对象的操作,这个时候是有$this的,然后”::”是类操作所以没有this实例,比如,在具体的桌子上,this指的就是那个具体的桌子,但是当调用的是::即指一类桌子的时候this是失效的。

我们用new来 创建实例,在上例中已经见过了。

继承,我们使用extends来让一个类继承另外一个类,被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final关键字。可以通过 parent:: 来访问被覆盖的方法或成员。 直接看个例子

01 class People{
02   public $var1="public";
03   private $var2="private";
04   protected $var3="protected";
05   static $var4 ="static";
06  
07   function say(){
08     echo "I'm people!";
09   }
10 }
11 class Student extends People{
12   public $name ;
13   public function  __construct($name){
14     $this->name = $name;
15   }
16   function say(){
17     echo "I'm student";
18   }
19   function test(){
20     parent::say();
21   }
22   function sayName(){
23     echo $this->name;
24   }
25 }
26  
27 $a = new People();
28 $b = new Student("猪哥");
29  
30 $a->say();
31 echo "\n";
32 $b->say();
33 echo "\n";
34 $b->test();
35  
36 $zhuge = new Student("猪");
37 $zhuge2 = new Student("怕树上的猪");
38 var_dump($zhuge->sayName());
39 var_dump($zhuge2->sayName());
40 var_dump(Student::$var4);
41 var_dump(People::$var4);

类的变量成员叫做“属性”,或者叫“字段”、“特征”,如上例中的var1,var2等。 属性声明是由关键字public或者protected或者 private开头,然后跟一个变量来组成。 属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指明明白白写清楚是什么,不需要计算的。

由 public 所定义的类成员(包括类和方法)可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问;而由 private 定义的类成员则只能被其所在类访问。

在类的成员方法里面,可以通过$this->property(property是属性名字或方法名字)这种方式来访问类的属性、 方法,但是要访问类的静态属性或者在静态方法里面却不能使用,而是使用self::$property。就和上例中得sayName 以及 var4一样。

至于this指的是当前实例,比如上例创建了一个“猪”实例和一个“趴树上的猪”两个student实例,this->name就是指各自的name。

static声明的变量或方法是静态变量或方法,或者也可以理解为类变量或方法,可以理解为所有的实例都有这个变量或方法,具体实例不能访问类变量,但是可以访问类方法,类方法中不能使用$this,有可能还没实例化呢。那时候就不存在$this。类变量默认是public的。从上例的var4中可以看出。

 

 

本文固定链接: http://www.qaforcode.net/archives/262 | 猪哥每日一贴

你可能感兴趣的:(php类和对象)