1、类的定义:

i. 类的关键字定义使用class

1.定义一个空类

Class Person{};

2.定义一个有成员属性和操作的类

Class Person{

成员属性........

操    作........

}

3.定义一个不能被继承的类,使用final关键字

Final class Person{

成员属性........

操    作........

}

4.注意:final关键字不能用来修饰成员属性 ,只能修饰类和方法(final方法后面介绍)

5.这里举一个带有final的class

定义一个final的类FinalClass,包含一个公共函数

final class FinalClass {

public function ffun() {

echo “本类为final类”;

}

}

定义一个类ChildFinalClass 并继承FinalClass 类

class ChildFinalClass extends FinalClass {

public function fchildfun() {

echo ‘本类继承final类FinalClass ’;

}

}

这样当执行以上命令的时候系统会提示

Fatal error: Class ChildFinalClass may not inherit from final class (FinalClass)

证明由final关键字定义的class是不可以被子类继承的

2、类中成员属性的定义

i. 成员属性就是对该类定义的一些变量属性,那人作为一个类来说,人都有一对眼睛(正常的啊,二郎神除外),一张嘴,两个耳朵,等这样的一些固定的用来描述或表现某种事物的专有名词称为成员属性

ii. 类中成员属性的声明使用的关键字

iii. 常见成员属性声明是由关以下键字
public,var,protected,private开头的,然后跟一个变量来组成的。还有一些成员属性包括,静态static,常量const.

Public: 表示全局的,类内部外部子类都可以访问

Var:     php 5 版本中会认为这个成员属性为public类型的属性

protected 表示受保护的,只有本类或子类或父类中可以访问

private
表示私有的,只有本类内部可以使用

Static:    1)静态的属性,

2)用static修饰的成员属性可以被同一个类的所有对象共享

3) 静态的数据是在类第一次被加载的时候就存在了内存中的数据段中(初始化静态段)

4)类中使用self::成员属性名

5)类外  类名::成员属性名

Const:   1)类中常量属性,在类中声明常量必须使用const

2)类中使用  self::成员属性名

3)类外使用  类名::成员属性名

注意:属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指php脚本在编译阶段时就为常数,而不是在编译阶段之后在运行阶段运算出的常数。例如,不能包含任何运算符,不能是任何变量,不能是一个函数等。

iv. 成员属性的调用方式:

在类的成员方法里面,可以通过 $this->property(property是属性名字)这种方式来访问类的属性、
方法,但是要访问类的静态属性或者在静态方法里面却不能使用,而是使用 self::$property。 在类的非静态方法里面可以使用伪变量
$this,这个伪变量是调用该方法的实例化对象引用。

接下来用代码对上面的内容做一下解释:

class FinalClass {

//static $a = strTolower();   
//这种写法错误

//const  A = 1+2;              //这种写法错误

//public $name = 123+456;     
//这种写法错误

static $a = '$a';

const  A = 'A';

public $name = '凤姐';

protected $sex = '男+女';

private $age = 23;

}

class ChildFinalClass extends FinalClass{

public function fchildfun(){

echo 'ChildFinalClass类中ChildFinalClass::$a->'.ChildFinalClass::$a."<hr>";

Echo 'ChildFinalClass类中ChildFinalClass::A->'.ChildFinalClass::A."<hr>";

echo '大家好,我叫'.$this->name."<hr>";

echo '我是:'.$this->sex.'生<hr>';

echo '我今年:'.$this->age.'<hr>';

//由于age是私有的成员属性,所以在这里将不会被调用,将提示没有定义此属性在ChildFinalClass类中。

}

}

$obj = new ChildFinalClass();

$obj->fchildfun();

3、类中操作的定义

i. 我本人一般喜欢叫操作为成员方法,以下我会叫操作为方法其实都是一样的

ii. 成员方法的定义:成员方法就是对该类定义的一些函数方法,比如拿这个类来例句例子,人能吃饭,能跑步,能敲代码,这就是成员方法。也就是可以做一些可执行性的动作我们理解为成员方法

iii. 成员方法的访问和成员属性一样可以参照上面成员属性的访问介绍。

iv. 成员方法和成员属性一样也包括public,protected,private,static,final并且作用域也是一样的,接下来举一些例子供大家参考和理解。

v. 静态的成员方法只能访问静态的成员属性和成员方法,并且类内部访问静态方法可以使用self::静态方法(),  类外部访问使用类名::静态方法()

1. 自定义方法:

class FinalClass {

static $a = '$a';

const  A = 'A';

public $name = '凤姐';

protected $sex = '男+女';

private $age = 23;

//定义一个公共方法

public function publickfun(){

echo 'FinalClass类中self::$a->'.self::$a."<hr>";

echo "FinalClass类中self::A->".self::A."<hr>";

echo '大家好,我叫:'.$this->name."<hr>";

echo '我是:'.$this->sex.'生<hr>';

echo '我今年:'.$this->age.'<hr>';

}

//定义一个受保护的方法

protected function protectedfun(){

echo 'FinalClass类中self::$a->'.self::$a."<hr>";

echo "FinalClass类中self::A->".self::A."<hr>";

echo '大家好,我叫:'.$this->name."<hr>";

echo '我是:'.$this->sex.'生<hr>';

echo '我今年:'.$this->age.'<hr>';

}

//定义一个私用方法

private function privatefun(){

echo 'FinalClass类中self::$a->'.self::$a."<hr>";

echo "FinalClass类中self::A->".self::A."<hr>";

echo '大家好,我叫:'.$this->name."<hr>";

echo '我是:'.$this->sex.'生<hr>';

echo '我今年:'.$this->age.'<hr>';

}

}

class ChildFinalClass extends FinalClass{

public function fchildfun(){

echo 'ChildFinalClass类中ChildFinalClass::$a->'.ChildFinalClass::$a."<hr>";

Echo 'ChildFinalClass类中ChildFinalClass::A->'.ChildFinalClass::A."<hr>";

echo '我是:'.$this->sex.'生<hr>';

echo '我今年:'.$this->age.'<hr>';

//由于age是私有的成员属性,可以理解为我不想让别人知道我的年龄,所以在这里将不会被调用,将提示没有定义此属性在ChildFinalClass类中。

$this->publickfun();

$this->protectedfun();

$this->privatefun();

//由于privatefun是私有的成员方法,所以在这里将不会被调用。

}

}

$obj = new ChildFinalClass();

$obj->fchildfun();

2.魔术方法

i. 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此

ii. 从PHP
5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是
为了重载已有的魔术方法,接下来列出一些魔术方法,如果大家想详细了解可以针对某一个进行查询了解,这里就不大篇幅的介绍了。

1、__construct() 构造方法

__destruct()

析构方法

2、__clone()

如果想复制一个对象则需要使用clone方法

3、__toString()

方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时

4、__sleep()  串行化的时候用

__wakeup 反串行化的时候调用

5、 __set_state()

当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)

6、__invoke(PHP 5.3.0以上版本有效)
当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。

7、__callStatic(PHP 5.3.0以上版本有效) 是为了处理静态方法调用

8、__get()  当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名。

__set()  给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。 这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。

9、__isset() 当在一个未定义的属性上调用isset()函数时调用此方法

__unset() 当在一个未定义的属性上调用unset()函数时调用此方法

10、__call( $method, $arg_array )
当调用一个未定义的方法是调用此方法

这里的未定义的方法包括没有权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()方​法,如果本类中不存在__call()方法就去找父类中的__call()方法。

11、__autoload() 自动加载魔术方法

PHP中如何定义类及其成员属性与操作的更多相关文章

  1. PHP如何定义类及其成员属性与操作

    1.类的定义: 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ //成员属性 $name     =  ' ...

  2. c#利用反射Assembly 对类和成员属性进行操作

    protected static void test() { //获取程序集 Assembly assembly = System.Reflection.Assembly.GetExecutingAs ...

  3. [javaSE] 反射-获取类的成员属性和构造方法

    成员属性和构造方法皆为对象,通过Class对象的方法可以得到 package com.tsh.reflect; import java.lang.reflect.Constructor; import ...

  4. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...

  5. 【python】python中的定义类属性和对像属性

    python中变量是没有类型的可以绑定任意类型,但是在语法上不能声明变量. 那我们怎麽来声名一个变量呢? f=None 这样我们给着个变量绑定了以各None类型,我们随时可用重新绑定其它类型.这样我们 ...

  6. C++中如何定义类和对象?

    在C++语言中,对象的类型被称为类,类代表了某一批对象的共性和特征. 类是对象的抽象,而对象是类的具体实例.如同C中的结构体一样,我们要先定义一个结构体,再使用结构体去定义一个变量.同一个结构体可以定 ...

  7. C#学习笔记(八)——定义类的成员

    一.成员的定义 1.定义字段 class Myclass { public int MyInt; } 可以使用readonly关键字,表示这个字段只能在执行构造函数的过程中赋值,或者由初始化语句赋值. ...

  8. 图像处理工具包ImagXpress中如何定义查看器的属性

    想要在图像处理控件ImagXpress中查看一个图像,首先需要创建一个查看器,之后你可以按照你自身的需要,来定义查看器的属性. 创建查看器 想要动态的创建一个查看器,需要先定义一个新的mageXVie ...

  9. C++类继承中,基类/当前对象属性/当前对象的构造顺序

    [1]中提到,规范的派生类构造函数三个要点: 首先创建基类对象 应通过成员初始化列表,创建基类对象 应该初始化本派生类新增的成员变量 那在构造派生类实例的过程中,其基类(以及多继承的时候多个基类)/当 ...

随机推荐

  1. 201521123002 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  2. 201521123015《Java程序设计》第1周学习总结

    1.本周学习总结 知道了JAVA语言的发展历史和目前使用的版本,还有什么是JDK(Java Development Kit).JRE (Java Runtime Environment).JVM(Ja ...

  3. 201521123095 《Java程序设计》第1周学习总结

    1. 本周学习总结     开始了对JAVA的初步了解和学习,了解了如何编写简单的JAVA程序.      了解了Java的诞生及发展以及如何运用JVN JRE JDK      JVM让JAVA可以 ...

  4. 201521123088《java程序设计》第十周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学 ...

  5. PTA分享码-Java

    主要用于Java语法练习,非竞赛类题目.   1. Java入门          959dbf0b7729daa61d379ec95fb8ddb0   2. Java基本语法   23bd8870e ...

  6. SharePoint备份文件

    stp文件:SharePoint的.stp文件   在做一个和SharePoint有关的项目时,由于对SharePoint的unfamiliar,所以客户发了几个后缀为.stp的文件将我纳闷了半天,不 ...

  7. Bootstrap栅格系统用法--Bootstrap基础

    1.栅格系统实现布局的原理 1)Bootstrap把屏幕的宽度拆分成12格(列),每一格像素的多少由设备屏幕分辨率决定,我们在开发项目的过程中不需要去指定像素或者百分比. 2)不同范围的分辨率对应不同 ...

  8. Python的json and pickle序列化

    json序列化和json反序列化 #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = '人生入戏' import json a = ...

  9. JVM菜鸟进阶高手之路一(一次与笨神,阿飞近距离接触修改JVM)

    转载请注明原创出处,谢谢! 今天在JVMPocket群里面看见,阿牛发了一个gc截图,之后ak47截图了特别恐怖,我就觉得好奇,去看看服务情况,截图日志如下 关于jstat命令详情可以参考:https ...

  10. display:flex css

    本文介绍下flex的用法和属性 这个一个自适应的3列盒子 <div class="flex"> <div style="background-color ...