<body>
<?php
//类调用用::
//对象调用用->
class Dog1//定义类
{
//成员属性(变量)
var $name;
var $age;
var $pinzhong; //成员方法
function Jiao1()
{
$this->name;
echo "{$this->name}在叫";//this代表当前对象 调用类中的对象用$this
} } $dog= new Dog1();
$dog->name = "旺财";//->调用变量
$dog->age = "10";
$dog->pinzhong = "哈士奇"; $dog->Jiao1();//调用方法
?>
<br />
<?php
class Dog
{
//成员属性(变量)
var $name;
var $age;
var $pinzhong;
//构造函数 每个类都有
//1、在类的实例化的时候第一个执行
//2、写法特殊 和类名一样,没有返回类型public Dog(){}
function __construct($n,$a,$p)//两个下划线 可以传值 对定义的变量初始化
{
$this->name = $n;
$this->age = $a;
$this->pinzhong = $p;
}
function Jiao()
{
$this->name;
echo "{$this->name}在叫";//this代表当前对象 调用类中的对象用$this
}
}
$dog= new Dog("旺财","10","哈士奇");
$dog->Jiao();
?>
<br />
<?php
//封装:将类里面的成员保护(private),外界无法直接访问
//public protect private 此类
//封装之后用常用方法调用 缺点:需要写很多方法很麻烦
class Dog2
{ private $name;
private $age;
private $pinzhong; function setname($n)//方法
{
$this->name=$n;
}
function setage($a)
{
if($a>=1 && $a<=5)
{
$this->age=$a;
}
}
function __construct($n,$a,$p)//两个下划线 可以传值 对定义的变量初始化
{
$this->name = $n;
$this->age = $a;
$this->pinzhong = $p;
}
function Jiao()
{ echo "{$this->name}:{$this->age}在叫";
} }
$dog = new Dog2("汪哥","3","金毛");
$dog->setname("小强");
$dog->setage("6");
$dog->Jiao(); ?>
<?php
//封装 set()方法和 get()方法
class Dog3
{ private $name;
private $age;
private $pinzhong; function __set($name,$value)//赋值的时候自动调用
{
$this->$name = $value; }
function __get($name)//取值的时候自动调用
{
return $this->$name; }
function __construct($n,$a,$p)//两个下划线 可以传值 对定义的变量初始化
{
$this->name = $n;
$this->age = $a;
$this->pinzhong = $p;
}
function Jiao()
{ echo "{$this->name}:{$this->age}在叫";
} }
$dog = new Dog3("汪哥","3","金毛");
$dog->name="大毛";//赋值的时候调用set()方法
$dog->age="1";
echo "<br />";
echo $dog->name;//取值的时候调用get()方法
echo "<br />";
echo $dog->pinzhong;
echo "<br />";
$dog->Jiao(); //继承
class Hashiqi extends Dog3
{ function Jiao()
{
parent::Jiao();//调用父类的方法 parent
//或Dog::Jiao() 用父类名;
echo "\t";
echo "hello";//不写上面是方法重写
} }
$dog = new Hashiqi("汪哥","3","金毛");
$dog->name="大毛";//赋值的时候调用set()方法
$dog->age="1";
echo "<br />";
echo $dog->name;//取值的时候调用get()方法
echo "<br />";
echo $dog->pinzhong;
echo "<br />";
echo "<br />";
$dog->Jiao();
//类前面加final不能被继承
//static静态属于类,非静态属于对象 静态变量不用实例化,通过类直接调用 用::调用里面的成员用self 静态方法不能调用非静态的 class HH extends Dog3
{
public static $height;//静态对象,属于类 static function Gao()//静态方法 static写前面
{
echo "<br />";
echo "这么高".self::$height;//静态方法调用静态成员 用self
}
} $dog= new HH("二毛","2","藏獒");
HH::$height = 10;
echo "<br />";
echo HH::$height;
HH::Gao(); //const 定义常量,常量定义好了,不能修改
const A=9;
?>
<?php
//多态 父类的引用指向子类的实例 必须要有继承 重载
class Ren
{
var $name;
var $age; function eat()
{
echo "{$this->name}正在吃饭";
} } class China extends Ren
{
function eat()
{
echo "{$this->name}正在用筷子吃饭";
} }
$ren = new China();
$ren->name = "张三";
$ren->eat();
?>
<br />
<?php
class Ren1
{
var $name;
var $age; function eat()
{
echo "{$this->name}正在吃饭";
}
function __tostring()
{
echo "这是一个人类";
}
function __clone()//克隆方法 在克隆的时候会自动执行,目的是将克隆出来的对象进行一些改变
{
$this->name = "王五"; }
}
$ren1 = new Ren1;
$ren1->name="李四";
$rl=clone $ren1;//克隆 $rl->eat(); //自动加载类
//第一种 include()函数 同一个目录下
echo "<br />";
include("Cat.php");//不在同一个目录下,往下找 www/Cat.php 往上找../Cat.php $cat= new Cat("喵喵咪","180","机器猫");
echo "<br />";
$cat->Jiu();
//第二种 require_once 'Cat.php';
//自动加载类
function __autoload($classname)
{
require_once $classname.".php";//require_once $classname."_class.php";其他写法 必须要有固定格式
}
$cat1= new Cat("喵喵","180","机器猫");
echo "<br />";
$cat1->name = "加菲猫";
$cat1->Jiu(); ?>
</body>

在页面Cat中的代码

<body>
<?php
class Cat
{
var $name;
var $age;
var $pinzhong; function __construct($n,$a,$p)
{
$this->name = $n;
$this->age = $a;
$this->pinzhong = $p; } function Jiu()
{
echo "一群叫‘{$this->name}’年龄‘{$this->age}’品种为‘{$this->pinzhong}’的小猫在拯救地球";
}
}
$cat= new Cat("喵喵","180","机器猫"); $cat->Jiu(); ?>
</body>

结果:

笔记:

面向对象:
一:定义类
class Dog
{
var $name;
var $age;
var $pinzhong;

function Jiao()
{
echo "{$this->name}在叫";
}
}

二:实例化对象
$dog = new Dog();
调用对象的成员:
$dog->name = "旺财";
$dog->Jiao();

三:$this关键字
$this->name;this代表该对象,如果要在成员方法中调用成员变量,一定要使用$this找出该成员变量

四:构造函数:
//构造函数 每个类都有
//1、在类的实例化的时候第一个执行
//2、写法特殊 和类名一样,没有返回类型 java写法:public Dog(){}

function __construct($n,$a,$p)
{
$this->name = $n;
$this->age = $a;
$this->pinzhong = $p;
}
$dog= new Dog("旺财","10","哈士奇");

五:析构函数:销毁对象的时候执行函数 不能有参数(了解)
function __destruct()
{
echo "拜拜";
}

六:封装:
将类里面的成员变量加一个private修饰符变成私有的,目的是为了保护类里面的成员不被外界随意访问,从而确保类的安全性。如果将变量设置为私有,如何去访问:
1.自己写函数get函数set函数,然后来对变量赋值和取值
2.用系统自带的__get()函数和__set()函数来实现类里面的变量赋值取值(两条下划线)
function __set($name,$value)
{
$this->$name = $value;
}
function __get($name)
{
return $this->$name;
}

七:继承
继承一般是单继承:一个儿子只能有一个父亲
子类可以继承父类的所有成员
子类可以对父类的成员方法进行重写:(函数名一样),如果要在子类方法中调用父类的方法,用parent::Jiao();
function Jiao()
{
parent::Jiao();

echo "hello";
}
final关键字可以定义该类为最终类,不可被继承

静态:
关键字:static ,如果成员声明了为静态的,那么该成员是属于该类的,不是属于对象的
如何调用静态的成员:
HaShiQi::$height = 10;
HaShiQi::Gao();
用类名加双冒号调用类的静态成员
八、多态:
条件:必须要继承,父类的引用指向子类实例,重写函数

function __tostring()
{
echo "这是一个人类";
}
tostring方法,在输出对象的时候可以显示该方法中的信息

$r1 = clone $ren;克隆对象
function __clone()
{
$this->name = "李四";
}

在克隆的时候会自动执行,该函数的目的就是将克隆出来的对象进行一些改变

九、在页面上引用类:

1.include来引用
include("../china.php");

2.require_once请求页面
require_once "../China.php";

PHP——面向对象的更多相关文章

  1. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  2. 一起学 Java(二)面向对象

    一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...

  3. js面向对象学习 - 对象概念及创建对象

    原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...

  4. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  5. .NET 基础 一步步 一幕幕[面向对象之对象和类]

    对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...

  6. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

  7. Java程序员应该了解的10个面向对象设计原则

    面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...

  8. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  9. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  10. .NET基础拾遗(2)面向对象的实现和异常的处理基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

随机推荐

  1. 【pyhon】黑客用字典暴力破解Zip文件密码原理性展示

    基本原理:用程序把字典文件里拟定好的密码一个个提取出来,去测试zip能否打开 字典文件pass.txt内容: 1224 2121 asdf abcd1234 dwsdsd dssds 程序代码: # ...

  2. Nodejs 天涯帖子《鹿鼎记中计》 柳成萌著 下载爬虫

    功能:从天涯帖子中下载楼主发言到一个文本文件中 实验对象:http://bbs.tianya.cn/post-no05-308123-1.shtml  <鹿鼎记中计> 柳成萌著 爬取效果: ...

  3. STL - 常用关联容器代码 - set & multiset

    代码如下: /* 5. set & multiset */ set<string> cities{ "Braunschweig", "Hanover& ...

  4. KineticJS教程(10)

    KineticJS教程(10) 作者: ysm  10.在容器之间移动图形对象 Kinetic支持通过图形对象的moveTo(container)方法把图形对象从一个容器移动到另一个容器里,这个容器指 ...

  5. itext处理pdf

    http://www.java2s.com/Tutorial/Java/0419__PDF/DecryptPdffile.htm

  6. 第十六周oj刷题——Problem I: 改错题:类中私有成员的訪问

    Description 改错题: 设计一个日期类和时间类,并编写全局函数display用于显示日期和时间. 要求:display函数作为类外的普通函数,而不是成员函数 在主函数中调用display函数 ...

  7. Python break

    break退出循环 用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用 break 语句. 比如计算1至100的整数和,我们用while来实现: sum = 0 x = ...

  8. setTimeout模拟setInterval调用

    在开发环境下,尽量不用间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动. 尽量使用超时调用来模拟间歇调用. 示例代码: <!DOCTYPE html> <html l ...

  9. 在ubuntu下如何搜索文件?

    来自 1.whereis 文件名 特点:快速,但是是模糊查找,例如 找 #whereis mysql 它会把mysql,mysql.ini,mysql.*所在的目录都找出来.我一般的查找都用这条命令. ...

  10. UISearchbar去除背景色的方法,适合iOS5/6/7/8.0beta

    通常使用UISearchbar都须要去除其背景色来与自己的界面风格保持协调,可是UISearchbar的设计随着iOS版本号的升级不断地在发生着变化.以下我们通过分析UISearchbar在各个iOS ...