php虽然是一门学习起来非常简单的语言,但是这门语言也包含了对面向对象编程的支持。尤其是随着php5的发布,php对面向对象的支持有了很大的进步。最近学习了一下php的面向对象编程,不禁感慨,面向对象真的是一种非常优雅的编程,最主要的是真的很难!

  学习面向对象,当然首先就要了解什么是类,什么是对象,类和对象有什么关系?类和对象的定义就不在这里赘述了,相信大家对类和对象都有一个基本的认识。还是主要说一下类和对象的关系:类是用于生成对象的模板,而对象是类的实例。如何定义类和实例化对象就不多说了,这都是非常简单的操作。下面简单记录一下面向对象的几部分吧(很多是自己在学习时的理解,有不对的地方请大家批评教育!)。

  (1)设置类的属性:大家对类有了基本的认识后就会知道,不同的类具有不同的属性,举个例子就像商品类,商品具有价格属性。定义类的属性其实和定义变量个人看来没有什么太大的区别,比较特别的就是在定义属性时,需要给类的属性一个可见性的关键字,这个可见性的关键字就决定了这个属性什么时候可以被访问。可见性关键字有:public、private、protect,如果使用var来定义,则默认为public。

<?php
header("Content-type: text/html; charset=utf-8");
class Product{
public $name="衬衫";
public $price=100;
} $product1=new Product();
echo $product1->name;
?>

在上述代码中,首先设置了页面编码格式为utf-8,然后定义了一个Product类,这个有两个属性:name、price,并且这两个属性都是public,运行这段代码将输出“衬衫”。

在php中还有一种动态增加属性的操作,$product1->haha="哈哈",直接用已经实例化的方法访问一个不存在的属性并且赋值的方法动态增加属性,这种动态增加属性有一个很大的缺点就是在用类实例化对象时,无法保证其它对象也有这个属性。

  (2)类中使用方法:使用方法就是在类中声明类有可能用到的函数,方法声明和函数声明差不多,在方法声明时需要在方法的前面加上一个可见性的关键字,因为可见性关键字的限制,使得方法可以在不同的地方被访问。在类中声明了方法以后,我们可以直接实例化一个对象,然后用对象去访问这个方法即可。

<?php
header("Content-type: text/html; charset=utf-8");
class Product{
public $name="衬衫";
public $price=100; public function say(){
return $this->price;
}
} $product1=new Product();
echo $product1->name."<br>";
echo $product1->say();
?>

上述代码执行后将会在浏览器输出:“衬衫”,下一行“100”。其实$this是一个伪变量,表示当前对象,注意,表示的是当前对象,而不是类。

  在类的方法中一个比较重要的方法就是构造函数(也叫作构造方法),构造方法的作用就是在创建对象时被自动调用,用于对象的实例化。在php5后,推行的构造函数的命名为__construct(),当我们使用new操作符实例化对象时,构造方法被自动调用,根据参数去实例化类中的属性,达到对对象的初始化。(其实个人觉得这种构造方法,只是提供一个自动调用机制,当我们在初始化时,自动调用构造函数,并且传入参数,根据传入的参数初始化类中成员属性)

<?php
header("Content-type: text/html; charset=utf-8");
class Product{
public $name;
public $price; public function __construct($name,$price){
$this->name=$name;
$this->price=$price;
} public function say(){
return $this->price;
}
} $product1=new Product("衬衫",100);
echo $product1->name."<br>";
echo $product1->say()."<br>";
$product2=new Product("牛仔裤",200);
echo $product2->say();
?>

上述代码执行后会在浏览器中输出“衬衫、100、200”。

  (3)继承:继承是从一个基类得到一个或者多个派生类的机制,子类通过对父类的继承,在获取父类属性和方法的通过,还可以通过“扩展”来扩展自己特有的属性和方法。继承的创建个人认为需要如下步骤,1、从现有基类中分离出不适合放在一起或者需要特殊处理的类方法 2、以我们所分离的为基础创建出派生类,创建子类时需用到关键字extends。 3、因为不同的子类的特有属性肯定不相同,所以我们应该构建子类自己的构造方法和类方法。在构建自己特有的构造函数时,可以使用::来访问父类的构造函数,在自己的构造函数中初始化自己特有的属性。

基类:

<?php
class ShopProduct{
//定义私有的属性
private $title;
private $producterMainName;
private $producterFirstName;
private $price;
private $$discount=0; //定义构造函数
public function __construct($title,$firstName,$mainName,$price){
$this->title=$title;
$this->producterFirstName=$firstName;
$this->producterMainName=$mainName;
$this->price=$price;
} //定义对私有属性进行访问的方法
public function getProducterFirstName(){
return $this->producterFirstName;
}
public function getProducterMainName(){
return $this->producterMainName;
}
public function getDiscount(){
return $this->discount;
}
public function getTitle(){
return $this->title;
}
public function getPrice(){
return ($this->price-$this->discount);
} //定义对私有属性进行操作的方法
public function setDiscount($num){
$this->discount=$num;
} //定义类中的一般方法
public function getProducer(){
return "{$this->producterFirstName}"."{$this->producterMainName}";
}
public function getSummaryLine(){
$base="{$this->title}({$this->producterMainName},";
$base.="{$this->producterFirstName})";
return $base;
}
}
?>

子类:

<?php
require_once("phpClassShopProduct.php");
class BookProduct extends ShopProduct{
//定义子类特有的私有属性
private $numPages=0; //定义构造函数
public function __construct($title,$firstName,$mainName,$price,$numPages){
parent::__construct($title,$firstName,$mainName,$price);
$this->numPages=$numPages;
} //定义子类的特有方法
public function getNumOfPages(){
return $this->numPages;
}
public function getPrice(){
return $this->price;
} //覆写父类已有的方法
public function getSummaryLine(){
$base=parent::getSummaryLine();
$base.=":page count-{$this->numPages}";
return $base;
}
}
?>

从以上代码中,可以看出通过对象的继承写出的代码非常的整洁,有层次。通过继承,大大提高了我们代码的重用性。

自己学习后写的一点东西,记录一下,都是自己的理解,如果哪里有错误,希望大家指出,感激不尽!

PHP面向对象编程学习之对象基础的更多相关文章

  1. Python记录14:面向对象编程 类和对象

    '''现在主流的编程思想有两种,一种是面向对象,一种是面向过程面向过程编程 核心是过程二字,过程指的是解决问题的步骤,即先干什么.再干什么.最后干什么... 基于该思想编写程序就好比再设计一条流水线, ...

  2. php面向对象编程学习之高级特性

    前几天写了一篇关于php面向对象基础知识的博客,这两天看了php面向对象的高级特性,写出来记录一下吧,方便以后拿出来复习. 面向对象除了最基本的定义类之外,最主要就是因为面向的一些高级特性,运用这些高 ...

  3. 13_Python的面向对象编程-类class,对象object,实例instance

    1.面向对象概述 1.类是用来描述对象的工具,把拥有相同属性和行为的对象分为一组     2.对象是由类实例化出来的一个具体的对象         属性: 对象拥有的名词,用变量表示         ...

  4. JavaScript学习笔记——对象基础

    javascript对象基础 一.名词解释: 1.基于对象 一切皆对象,以对象的概念来编程. 2.面向对象编程(oop Object oriented programming) A.对象 就是人们要研 ...

  5. Python之面向对象编程学习

    不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...

  6. python面向对象编程学习

    python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

  7. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  8. JavaScript面向对象编程学习笔记

    1  Javascript 面向对象编程 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例 ...

  9. 04面向对象编程-01-创建对象 和 原型理解(prototype、__proto__)

    1.JS中对象的"不同":原型概念 从Java中我们可以很好地去理解 "类" 和 "实例" 两个概念,可是在JavaScript中,这个概念 ...

随机推荐

  1. Ubuntu package managerment tools

    Visual demostration References Understanding differences between dpkg and apt-get/aptitude tools. A ...

  2. C语言静态函数静态变量

    C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数.而内部对象是指定义在函数内部的函数参数及变量. 外部变量定义在函数之外,因此可以在许多函数中使用.由于C语言不允许在一个函数中定义 ...

  3. Which PHP mode? Apache vs CGI vs FastCGI

    Which PHP mode? Apache vs CGI vs FastCGI There are multiple ways to execute PHP scripts on a web ser ...

  4. Scrapy的架构初探

    Scrapy,Python开发的一个web抓取框架. 1,引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是“开放的思想”,聚合最好的想 ...

  5. 欧几里得求最大公约数--JAVA递归实现

    欧几里得算法求最大公约数算法思想: 求p和q的最大公约数,如果q=0,最大公约数就是p:否则,p除以q余数为r,p和q的最大公约数即q和r的最大公约数. java实现代码: public class ...

  6. PBOC/EMV 中SDA和DDA简介

    PBOC/EMV里有两个非常重要的概念,SDA(static data authentication)和DDA(dynamic data authentication),分别叫做静态数据认证和动态数据 ...

  7. docker 基于现有镜像修改后保存,上传私有仓库

    docker:/root# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f3cb864be528 192.168.3 ...

  8. css案例学习之div与span的区别

    代码: <html> <head> <title>div 标记范例</title> <style type="text/css" ...

  9. layout_weight 的解释及使用

    layout_weight 的解释及使用 转自:http://my.oschina.net/jsan/blog/191492 在Android的控件布局中,有一个奇葩的 layout_weight 属 ...

  10. 黑马程序员_static\访问权限\单例模式 大汇总

    一.static关键字 1.用法 Static是一个修饰符,用于修饰成员,包括成员变量和成员函数.当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用.System.ou ...