function __autoload($class_name){

//require_once语句在脚本执行期间包含并运行指定文件。此行为和 require()语句完全相同,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含

require_once $class_name . '.php';

}

$obj =new testAAA();

$obj2=new type();

?>

类的属性

1)类的变量成员叫做“属性”,或者叫“字段”、“特征”,在本文档统一称为“属性”。

2)属性声明是由关键字public或者protected或者 private开头,然后跟一个变量来组成

3)属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指php脚本在编译阶段时就为常数,而不是在编译阶段之后在运行阶段运算出的常数。说明:为了兼容php4,php5声明属性依然可以直接使用关键字var,或者放在public,

4)在类的成员方法里面,可以通过$this->property(property是属性名字)这种方式来访问类的属性、 方法.

5)要访问类的静态属性或者在静态方法里面却不能使用访问属性的方法,而是使用self::$property

6)在类的非静态方法里面可以使用伪变量$this,这个伪变量是调用该方法的实例化对象引用protected, or private之前。但是var并不是必须的。<?php

class SimpleClass{

//错误的属性声明

// public $var1='hello'.' World';

// public $var2=<<

//hello world

//EO;

// public $var3=1+2;

// public $var4=self::myStaticMethod();

// public $var5=$myvar;

//正确的属性声明

public $var6=myConstant;

public $var7=array(true,false);

//在php5.3.0及其以后,下面的声明也正确

public $var8=<<

hello world

EOD;

}

?>

类常量

们可以在类中定义常量。常量的值将始终保持不变。在定义和使用常量的时候不需要使用$符号。常量的值必须是一个定值<?php

class ConstantClass{

const constant='常量值';

function showConstant(){

echo self::constant."
";

}

}

echo ConstantClass::constant."
";//相当于java中的ClassName.属性名

$classname="ConstantClass";

// echo $classname::constant,"
";//php5.3以后才有这种,相当于java中的ClassName.属性名,不过将ClassName动态化了,加上命名空间报错

$class=new ConstantClass();

$class->showConstant();

echo $class::constant."
";//php5.3以后

?>

自动加载对象

很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件列表。

在 PHP 5 中,不再需要这样了。可以定义一个 __autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

注意: autoload前面是两个下划线

1)在__autoload函数中抛出的异常不能陪catch语句块捕获,会导致致命错误

2)如果使用php的CLI交互模式时,Autoloading不存在<?php

function __autoload($class_name){

//require_once语句在脚本执行期间包含并运行指定文件。此行为和 require()语句完全相同,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含

require_once $class_name . '.php';

}

$obj =new testAAA();

$obj2=new type();

?>

在testAAA.php文件中<?php

class testAAA{

function testAAA()

{

echo "加载了".get_class($this);

}

}

?>

在type.php文件中<?php

class type{

function type(){

echo "加载了".get_class($this);

}

}

?>

构造函数

void __construct(...)

PHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

注意:如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。<?php

class BaseClass{

function __construct(){

//如果是子类调用该方法,get_class()返回的是子类的名称

//echo get_class($this)."初始化了
";

echo "BaseClass初始化了
";

}

}

class SubClass extends BaseClass{

function __construct(){

parent::__construct();//默认不调用父类的构造函数,调用父类的构造函数方法

echo get_class($this)."初始化了
";//有命名空间的情况下打印出来的:Base\SubClass初始化了,无:SubClass初始化了

}

}

$obj=new BaseClass();

$obj=new SubClass();

class TreeClass{

function TreeClass(){//当有__construct方法时,这个不执行的

echo get_class($this)."初始化了
";

}

// function __construct(){//没有命名空间的时候,两个不能同时出现

// echo "ac初始化了
";

// }

}

$obj=new TreeClass();

class fourClass{

function fourClass(){//定义了命名空间原始的

echo get_class($this)."初始化了
";

}

}

$obj=new fourClass();

?>

注意:为了实现向后兼容性,如果 PHP 5 在类中找不到 __construct()函数,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct() 的方法,但它却又不是构造函数。

析构函数

void __destruct ( void )

PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。<?php

class MyDestructClass{

function __construct(){

print "MyDestructClass初始化了
";

$this->name="MyDestructClass";

}

function __destruct(){//全部解析完以后才执行该方法

print "Destroying".$this->name."
";

}

}

$obj=new MyDestructClass();

?>

和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。

析构函数即使在使用exit()终止脚本运行时也会被调用。在析构函数中 调用exit()将会中止其余关闭操作的运行。

访问控制

对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问。

对类成员的访问控制

类成员都必须使用关键字public、protected 或 private 进行定义

注意:为了兼容性考虑,在 PHP 4 中使用 var 关键字对变量进行定义的方法在 PHP 5 中仍然有效(只是作为 public 关键字的一个别名)。在 PHP 5.1.3 之前的版本,该语法会产生一个 E_STRICT 警告。

对方法的访问控制

类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。

对象继承

继承已为大家所熟知的一个程序设计特性,PHP 的对象模型也使用了继承。继承将会影响到类与类,对象与对象之间的关系。

比如,当扩展一个类,子类就会继承父类的所有公有和保护方法。但是子类的方法会覆盖父类的方法。

继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。

范围解析操作符(::)

范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法。

1)当在类的外部访问这些静态成员、方法和常量时,必须使用类的名字。

2)self 和 parent这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。

3)当一个子类覆盖其父类中的方法时,PHP 不会再执行父类中已被覆盖的方法,直到子类中调用这些方法为止。这种机制也作用于 构造函数和析构函数、重载 及 魔术 函数。<?php

class MyClass

{

const CONST_VALUE = '常量值';

protected function myFunc() {

echo "MyClass::myFunc()
";

}

}

class OtherClass extends MyClass

{

// 覆盖父类中的方法

public function myFunc()

{

// 但仍然可以调用已被覆盖的方法

parent::myFunc();

echo "OtherClass::myFunc()
";

}

public static $my_Static="静态值";

public static function doubleColon(){

echo parent::CONST_VALUE."
";

}

}

echo MyClass::CONST_VALUE,"
";

OtherClass::doubleColon();

$class = new OtherClass();

$class->myFunc();

?>

php 类学习,php的类学习(一)相关推荐

  1. 利用PySpark进行迁移学习的多类图像分类

    在本文中,我们将演示计算机视觉问题,它具有结合两种最先进技术的能力:深度学习和Apache Spark.我们将利用深度学习管道的强大功能来解决多类图像分类问题. PySpark 是 Spark 为 P ...

  2. 学习C++ 丨 类(Classes)的定义与实现!C/C++必学知识点!

    一."类" 的介绍 在C++中, 用 "类" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物.那么类就可以看 ...

  3. SpringMVC 学习-异常处理 SimpleMappingExceptionResolver 类

    SpringMVC 学习-异常处理 SimpleMappingExceptionResolver 类 参考文章: (1)SpringMVC 学习-异常处理 SimpleMappingException ...

  4. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

  5. Java7编程 高级进阶学习笔记--嵌套类

    定义: 在一个类中定义的类叫做嵌套类. 作用: 1.允许对相关类进行逻辑分组 2.增强了代码的封装性 3.使代码具有更强的可读性和维护性 使用方式: package com.cmz.baseTest; ...

  6. 学习Kotlin(三)类和接口

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  7. python语言学习:python语言学习中的定义类、定义函数、封装api等详细攻略

    python语言学习:python语言学习中的定义类.定义函数.封装api等详细攻略 目录 python语言学习中的定义类 python语言学习中的定义函数 python语言学习中封装api pyth ...

  8. C++学习笔记:类的成员函数的声明与定义

    今天学习一下类的成员函数,首先讲一下常规的类外的函数 写在类的外部的函数叫做全局函数,不属于任何的类. 如果写在类的里面就叫做类的成员函数 这里注意的是,类的成员函数如果加了const,就表明该函数不 ...

  9. JVM学习04:类的文件结构

    JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理 转载于:https://www.cn ...

  10. JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别

    JAVAAPI学习之Calendar类 http://blog.csdn.net/myjlvzlp/article/details/8065775(写的很好,清晰易懂) Calendar类set(). ...

最新文章

  1. java.util.Collections.synchronizedSet()方法的使用
  2. face detection[PyramidBox]
  3. 详解Pattern类和Matcher类
  4. Autowired byType 与 byName 策略
  5. VTK:直线网格之RGrid
  6. Java中如何使用session
  7. TensorFlow学习笔记(二十一) tensorflow机器学习模型
  8. 打开服务器文件提示内存不够,打开服务器文件提示内存不够
  9. leetcode 罗马数字转整数
  10. pythondatetime_Date
  11. [html] 如何在网页中嵌入公司地址的地图?
  12. led linux定时闪烁心跳,Linux驱动——LED闪烁
  13. sqlite 交叉编译-转
  14. 前端js-angluar定时刷新器
  15. Raspberry 4B 2G Shairport-sync Airplay
  16. 24种常见的逻辑关系谬误
  17. So Easy! HDU - 4565(构造共轭+矩阵快速幂)
  18. html 伸缩布局,CSS3弹性伸缩布局(下)——flex布局
  19. mysql 超级用户登录_MySQL超级用户(root)密码忘记重置
  20. 分组转发和路由选择基础

热门文章

  1. Oracle从小白到大牛的刷题之路(建议收藏学习)
  2. 前端学习(1437):vue一些链接
  3. 三相阻容降压供电DCDC电源
  4. vue获取前一个页面路由地址
  5. C++知识总结(2)--字符串和数组
  6. 认识Web.config文件
  7. jq 在字符串中,去掉指定的元素
  8. Python——使用matplotlib绘制柱状图
  9. InnoDB的auto_increment指定值被重置问题
  10. javasript 操作option select