php 类学习,php的类学习(一)

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();

?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1575):复习todoMVC

系统再演示一下angular的实现原理流程 分装实现 两个文件 js和html

蛋疼的中文编码及其计算机编码历史

更好的博客&#xff1a;http://my.oschina.net/goldenshaw/blog?catalog536953 一&#xff1a;编码发展&#xff1a; 1 ANSI编码&#xff1a;计算机在美国出现&#xff0c;使用单字节8位编码&#xff0c;共可以表示255个状态。&#xff08;0-32&#xff08;0x00-0x20&#xff…

java异常处理机简答题,【简答题】JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分别代表什么意义?...

【简答题】JAVA 语言如何进行异常处理&#xff0c;关键字&#xff1a; throws,throw,try,catch,finally 分别代表什么意义&#xff1f;更多相关问题用蒸汽进行设备管线吹扫时,应将被吹扫的设备管线,相应部位仪表引线阀关闭,防止损坏仪表。()铝壶内装有2.5kg的水&#xff0c;其温…

阐述linux IPC(五岁以下儿童):system V共享内存

【版权声明&#xff1a;尊重原创。转载请保留源&#xff1a;blog.csdn.net/shallnet 要么 .../gentleliu&#xff0c;文章学习交流&#xff0c;不用于商业用途】system V共享内存和posix共享内存类似&#xff0c;system V共享内存是调用shmget函数和shamat函数。 shmget函数创…

php io select,Python IO多路复用之——select方案服务端和客户端代码【python源码详解】...

准备文件&#xff1a;IO.py 服务端代码tcp_c.py 客户端代码IO.py 代码&#xff1a;from select import * #引入 select 模块from socket import * #引入 socket 模块s socket() #实例化一个socket 对象s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #设置端口可重用s.bind((0.0.0…

NDK和项目依赖

NDK使用 JDK:Java Development KitSDK:Software Development KitNDK:Native Development KitJNI: Java Nattive InterfaceNDK开发流程&#xff1a; 下载NDK并配置NDK路径新建项目 修改build.gradle文件 替换classpath:com.android.tools.build:gradle-experimental:0.4.0 替换a…

java创建树形子目录,Java之File类及递归树形展示目录_20150804

Java之File类及递归树形展示目录20150804下面的构造函数可以用来生成File 对象&#xff1a;File(String directoryPath)File(String directoryPath, String filename)File(File dirObj, String filename)这里&#xff0c;directoryPath是文件的路径名&#xff0c;filename 是文…

使用PDFBox解析PDF文件

今天在Nutch源码中准备增加一个PDF处理方面的功能&#xff0c;其中要做的一步是提取出PDF文档中的文本信息。考虑了一下&#xff0c;还是准备使用PDFBox。看了一下&#xff0c;Nutch源码中的parse-tika插件下有一个PDFBox&#xff0c;不过是1.1.0版本&#xff0c;很多PDF文档都…

matlab 数字图像滤波,数字图像处理 (基于Matlab) 滤波

《数字图像处理》实验报告一、实验目的(不少于200字)一、第一个实验用的是各种空间域的方式来滤波&#xff0c;也就是直接把图像和空间滤波器的模板做卷积&#xff0c;当然图像处理很重要的一个部分还有频域的处理。这就涉及到图像的傅里叶变换&#xff0c;通过将空域内的图像傅…

myelicpes怎么导入PHP项目,利用PHP执行SQL文件,将SQL文件导入到数据库

引用如何利用php自动执行 sql文件。其实很简单&#xff0c;就是获取sql文件中的内容&#xff0c;然后将每一句sql语句一次执行就行啦。//读取文件内容$_sql file_get_contents(test.sql);$_arr explode(;, $_sql);$_mysqli new mysqli(DB_HOST,DB_USER,DB_PASS);if (mysqli_…

atitit. 分销系统规划p8k

atitit. 分销系统规划p8k 1. 商户平台管理 overview2 1.1. 分销业务管理2 1.2. 文案管理2 1.3. 订单管理3 1.4. 统计报表3 1.5. 财务结算3 1.6. 自身信息管理4 2. 商户后台详细5 3. 推广人后台6 3.1. 产品及文案6 3.2. 订单与结算6 3.3. 下线邀请与奖励6 3.4. 订单统计6 3.5. 资…

php数据访问层设计,php - Zend框架数据访问层(DAL) - 堆栈内存溢出

好吧&#xff0c;在处理Data Access Layer &#xff0c;您必须考虑的第一件事是该层还具有子层 &#xff0c;在现代框架中很难找到名为“ dal”的文件夹(我以Zend为基础框架和Symfony)。其次&#xff0c;关于ActiveRecord &#xff0c;您必须知道默认情况下Zend Frameworks 不会…

matlab 8.4,《DSP using MATLAB》Problem 8.42

代码&#xff1a;%% ------------------------------------------------------------------------%% Output Info about this m-filefprintf(‘\n***********************************************************\n‘);fprintf(‘ Problem 8.42 \n\n‘);banner();%% ------------…

lua的string.gsub初使用

今天在学习lua&#xff0c;熟悉项目代码的过程中&#xff0c;发现string.gsub好高级&#xff0c;所以在此mark下。 以下是lua5.1的官方文档介绍。 string.gsub (s, pattern, repl [, n])Returns a copy of s in which all occurrences of the pattern have been replaced by a …

php对象比较大小,PHP 面向对象:对象的比较

简明现代魔法 -> PHP服务器脚本 -> PHP 面向对象&#xff1a;对象的比较PHP 面向对象&#xff1a;对象的比较2010-04-07在PHP中有 赋值符号、 等于符号 和 全等于符号, 这些符号代表什么意思&#xff1f;当使用比较操作符()时&#xff0c;对象以一种很简单的规则比较&a…

mysql 备份

方法一&#xff1a; 1&#xff0c;暂停Mysql进程或服务 2&#xff0c;复制mysql\data文件夹 3&#xff0c;重新安装程序和mysql, 把 ibdata1及数据库文件夹copy到新目录 4&#xff0c;重启服务 方法二 数据导出&#xff1a;mysqldump -u数据库用户名 -p 要导出的数据库> otc…