前面的话

  面向对象程序设计(OOP)是一种计算机编程架构。计算机程序由单个能够起到子程序作用的单元或对象组成,为了实现整体运算,每个对象都能接收信息、处理数据和向其他对象发送信息。OOP达到了软件工程的三个目标:重用性、灵活性和扩展性,使编程的代码更简洁、更易于维护,并且具有更强的可重用性。PHP主要通过类和对象来实现面向对象的程序设计,本文将详细介绍php的类和对象

  通过了解PHP的类和对象,对深入理解javascript的继承有促进作用,关于javascript继承的详细信息移步至此

  类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对象的抽象就是类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。在开发时,要先抽象类再用该类去创建对象,而在程序中直接使用的是对象而不是类

  类是一个独立的程序单位,是具有相同属性和服务的一组对象集合。它为属于该类的所有对象提供了统一抽象描述,其内部包括成员属性和服务方法两个主要部分

  每个类的定义都以关键字class开头,后面跟着类名,后面跟着一对花括号,里面包含类的属性与方法的定义

  一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)

  [注意]使用->操作符时,变量$var前面的美元符号$是要省略的

<?php
class SimpleClass
{
//成员属性
public $var = 'a default value'; //成员方法
public function displayVar() {
echo $this->var;
}
}
?>

成员属性

  类的变量成员叫做“属性”,或者叫“字段”、“特征”。属性声明是由关键字public、protected或private开头,然后跟一个普通的变量声明来组成。属性中的变量可以初始化,但是初始化的值必须是最终的值,而不应是带运算符的表达式、变量、方法或函数调用

  如果直接使用 var 声明属性,而没有用 public,protected 或 private 之一,PHP5会将其视为 public

public $var3 = 1+2;             //错误格式
public $var4 = self::myStaticMethod(); //错误格式
public $var5 = $myVar; //错误格式 public $var6 = 100; //普通数值(4个标量:整数、浮点数、布尔、字串)
public $var6 = myConstant; //常量
public $var7 = self::classConstant; //静态属性
public $var8 = array(true, false); //数组

成员方法

[修饰符] function 方法名(参数..){
[方法体]
[return 返回值]
}

  成员方法的修饰符包括:public、protected、private、static、abstract、final

  声明的成员方法必须和对象相关,不能是一些没有意义的操作

public function say(){
echo "说话";
}
public function run(){
echo "走路";
}

对象

  在客观世界里,所有的事物都是由对象和对象之间的联系组成的。对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位

  要创建一个对象,也就是实例化一个类,必须使用new关键字

  如果在new之后跟着的是一个包含有类名的字符串,则该类的一个实例同样被创建

<?php
$instance = new SimpleClass(); // 也可以这样做:
$className = 'Foo';
$instance = new $className(); // Foo()
?>

成员访问

  类中包含成员属性与成员方法两个部分,可以使用“new”关键字来创建一个对象,即:$引用名 = new 类名(构造参数);可以使用特殊运算符“->”来访问对象中的成员属性或成员方法

$引用名 = new 类名(构造参数);
$引用名->成员属性=赋值; //对象属性赋值
echo $引用名->成员属性; //输出对象的属性
$引用名->成员方法(参数);//调用对象的方法

  [注意]如果对象中的成员不是静态的,那么这是唯一的访问方式

  当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例

<?php
class SimpleClass{ }
$instance = new SimpleClass();
$assigned = $instance;
$reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; var_dump($instance);//null
var_dump($reference);//null
/*
object(SimpleClass)[1]
public 'var' => string '$assigned will have this value' (length=30)
*/
var_dump($assigned);
?>

this

  当一个方法在类定义内部被调用时,有一个可用的伪变量this,特殊对象的引用this就是在对象内部的成员方法中,代表本对象的一个引用,但只能在对象的成员方法中使用,不管是在对象内部使用$this访问自己对象内部成员。还是在对象外部通过对象的引用名称访问对象中的成员,都需要使用特殊的运算符“->”来完成访问

<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this is not defined.\n";
}
}
} class B
{
function bar()
{
// Note: the next line will issue a warning if E_STRICT is enabled.
A::foo();
}
} $a = new A();
$a->foo();//$this is defined (A) A::foo();//$this is not defined.
$b = new B();
$b->bar();//$this is defined (B) B::bar();//$this is not defined.
?>

前端学PHP之面向对象系列第一篇——类和对象的更多相关文章

  1. 前端学PHP之面向对象系列第二篇——魔术方法

    × 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这 ...

  2. 前端学PHP之面向对象系列第三篇——三大特性

    × 目录 [1]封装 [2]继承[3]多态 前面的话 php面向对象编程的三大特性是封装性.继承性和多态性.本文将介绍php的这三大特性 封装 封装就是把对象中的成员属性和成员方法加上访问修饰符( p ...

  3. javascript面向对象系列第一篇——构造函数和原型对象

    × 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如 ...

  4. 深入理解 ajax系列第一篇(XHR 对象)

    1999年,微软公司发布了IE5, 第一次引入新功能:允许javascript 脚本向服务器发起 hffp 请求.这个功能方式并没有被引起注意,知道2004年 Gmail 发布和 Google Map ...

  5. 前端学PHP之面向对象系列第六篇——简单图形面积计算器实现

    前面的话 本文用面向对象的技术来实现一个简单的图形面积计算器 图形类 //rect.class.php <?php abstract class Shape{ public $name; abs ...

  6. 前端学PHP之面向对象系列第五篇——对象操作

    × 目录 [1]对象克隆 [2]对象比较[3]对象串行化[4]json 前面的话 本文主要介绍面向对象中的一些对象操作 对象克隆 对象复制,又叫对象克隆,可以通过 clone 关键字来完成 在多数情况 ...

  7. 前端学PHP之面向对象系列第四篇——关键字

    × 目录 [1]public [2]protected [3]private[4]final[5]static[6]const[7]this[8]self[9]parent 前面的话 php实现面向对 ...

  8. 前端学PHP之面向对象系列第四篇-----关键字

    public public表示公有,它具有最大的访问权限,被定义为公有的类成员可以在任何地方被访问 如果属性用 var 定义,则被视为公有,如果方法没有设置关键字,则该方法默认为公有 <?php ...

  9. Entity Framework 6.0 入门系列 第一篇

    Entity Framework 6.0 入门系列 第一篇 好几年前接触过一些ef感觉不是很好用,废弃.但是 Entity Framework 6.0是经过几个版本优化过的产物,性能和功能不断完善,开 ...

随机推荐

  1. NOIP2016普及

    还记得去年局部变量忘记置零coin爆零的事......结果我今年又要考一年普及[趴 最近沉迷分块莫队无法自拔,这几天才想起来我是个普及组选手 几乎没准备普及,周六上午抱抱佛脚好了...... 希望能顺 ...

  2. 软件工程:Wordcount程序作业

    由于时间的关系,急着交作业,加上这一次也不是那么很认真的去做,草草写了“Wordcount程序”几个功能,即是 .txt文件的读取,能计算出文件内容的单词数,文件内容的字符数,及行数. 这次选用C来做 ...

  3. (转)什么是“黑客” by 王珢

    什么是“黑客” by 王垠很多程序员自豪的把自己叫做“黑客”(hacker),把编程叫做 hack.可是殊不知,其实在最高级的程序员眼里,“黑客”其实是一个贬义词.他们更愿意被叫做“程序员”(prog ...

  4. Zend Studio XDebug调试配置

    最近在配置zend studio时找了些资料,发现了这个,说的比较详细 搭建Zend Studio 10.5 和XDebug 环境,试图进行 Drupal的调试, 经历了一些困难,但是最终解决了问题, ...

  5. 反向传播(BP)算法

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:刘皮皮链接:https://www.zhihu.com/question/24827633/answer/29120394来源 ...

  6. 如何修改SQL SERVER服务器的端口

    sql server的服务器端口默认是1433,设置服务器端口的位置在这里: 这里的端口,默认是1433,我把它改成了65499 修改端口之后,客户端如何连接? 下面是SSMS的连接方式: 下面是一个 ...

  7. Eclipse上安装GIT插件EGit及使用

    一.Eclipse上安装GIT插件EGit Eclipse的版本eclipse-java-helios-SR2-win32.zip(在Eclipse3.3版本找不到对应的 EGit插件,无法安装) E ...

  8. java接口中定义成员变量

    //抽象类中可以定义如下成员变量:public abstract class People { public String name; public int age; public abstract ...

  9. The Swiss Army Knife of Data Structures … in C#

    "I worked up a full implementation as well but I decided that it was too complicated to post in ...

  10. Tomcat无故自动退出的问题

    我在这篇文章<写一个脚本,自动启动Tomcat>中提到Tomcat会无缘无故退出,而且在日志中找不到原因.后来终于知道为什么了: 由于内存不足,被OOM Killer杀死的!由于是直接被系 ...