php是不是面向对象编程,PHP面向对象编程入门

1、常用术语说明

class 类

object 对象

new 实例化

member 类成员

method 方法,成员函数

property 属性,成员变量

constant 类常量

2、类的构造

class ClassName{ //class关键字加类名

//类中只能有三种成员:属性、类常量、方法,不限数量

//成员变量(属性)

public $var; //普通属性,只能通过对象访问,声明时必须使用访问控制修饰符

public static $s_var = 0; //静态属性,使用static关键字修饰的属性

const PI = 3.14; //类常量,声明时必须使用const关键字修饰并赋值,其值不可修改

//成员方法

function fn0(){

//普通成员方法

echo '普通成员方法运行了
';

}

static function fn1(){

//静态方法

echo self::$s_var.'静态方法运行了
'; //类似$this,在类内部使用self关键字代表当前类名

}

public function __construct($var){

//构造方法,对象实例化时自动调用该方法

$this->var = $var; //$this表示当前对象

echo '构造方法运行了
';

}

public function __destruct(){

//析构方法,对象销毁时自动调用该方法

echo '析构方法运行了
';

}

public function __clone(){

//克隆方法,克隆对象时自动调用该方法

echo '克隆方法运行了
';

}

}

$c = new ClassName('test'); //对象实例化

echo $c->var.'
'; //访问对象属性$obj->var

$c->var = 'update'; //修改对象属性

$c->new_var = 'add'; //新增对象属性

var_dump($c);echo '
';

unset($c->new_var); //删除对象属性

var_dump($c);echo '
';

$c->fn0(); //调用成员方法

echo ClassName::PI.'
'; //访问类常量,使用:类名::类常量名

echo ClassName::$s_var.'
'; //访问静态属性,使用:类名::$静态属性名

ClassName::fn1(); //调用静态方法

3、成员修饰符

3.1、关键字:

类常量,不可修改性const(修饰属性),类常量只能通过类访问:类名加范围解析操作符(双冒号::)

静态成员-static(修饰属性和方法),静态成员只能通过类访问

不可继承性final(修饰类和方法)

3.2、访问控制符

public:表示公有的,其修饰的属性和方法可以在类内和类外访问,可以被继承

protected:表示受保护的,,其修饰的属性和方法只可以在类内访问,可以被继承

privated:表示私有的,其修饰的属性和方法只可以在类内访问,不可以被继承

属性前一定要加一个访问控制修饰符,类常量不用加访问控制修饰符,方法前可以不加访问控制修饰符,默认是public

4、对象值传递

对象的赋值操作是引用赋值,即:当将对象a的值赋值给对象b时,a和b指向内存中同一个地址

如果需要实现真正的复制,可以使用对象克隆方法:$b = clone $a;

私有化__clone方法可以禁止对象被克隆:private function __clone(){}

5、类的加载

类的访问必须保证类在内存中已经存在,所有在使用类之前需要将包含类的PHP文件加载到内存,本质是文件加载。

手动加载:

if(!class_exists('Man')){

//类不存在,加载

include_once 'Man.php';

}

new Man();

自动加载:

php7以前:

function __autoload($class_name){

//假设有多个类放在多个文件夹中

//先尝试去a文件夹中寻找类

$file = 'a/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

exit;

}

//再尝试去b文件夹中寻找类

$file = 'b/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

exit;

}

//以此类推,直到找到类或找完所有包含类的文件夹为止

}

$d = new Dog(); //实例化Dog类,系统自动调用__autoload函数

php7以后:

function my_autoload($class_name){

$file = 'a/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

exit;

}

$file = 'b/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

exit;

}

}

spl_autoload_register('my_autoload');

$d = new Dog();

也可以分开多个加载函数:

function a_autoload($class_name){

$file = 'a/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

}

}

function b_autoload($class_name){

$file = 'b/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

}

}

spl_autoload_register('a_autoload');

spl_autoload_register('b_autoload');

$d = new Dog();

自动加载类:

class Autoload{

public static function loadA($class_name){

$file = 'a/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

}

}

public static function loadB($class_name){

$file = 'b/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

}

}

}

spl_autoload_register(array('Autoload','loadA'));

spl_autoload_register(array('Autoload','loadB'));

$d = new Dog();

6、设计模式

单例模式:一个类有且仅有一个对象,例如操作系统中的资源管理器,目的是为了保护资源的唯一性

class Singleton{

//使用一个静态属性保存生产出来的对象

private static $object = NULL;

//私有化构造方法

private function __construct(){}

//类入口

public static function getInstance(){

if(!(self::$object instanceof self)){

self::$object = new self();

}

return self::$object;

}

//私有化克隆方法,防止克隆产生新对象

private function __clone(){}

}

//实例化两个对象

$s = Singleton::getInstance();

$s1 = Singleton::getInstance();

var_dump($s,$s1); //检测到是同一个对象

工厂模式factory:

由一个地方生产对象,其他位置就不需要额外实例化对象,从而可以方便后期代码统一维护(改名),方便隐藏真实的类结构。

工厂模式针对相似模型的统一产出,要有一批具有类似功能的类,其本质是相似的大类下的小类

静态工厂(生产对象时需要知道类名):

class Man{

public function display(){

echo 'Man
';

}

}

class Woman{

public function display(){

echo 'Woman
';

}

}

class Child{

public function display(){

echo 'Child
';

}

}

class HumanFactory{

public static function getInstance($class_name){

return new $class_name();

}

}

$m = HumanFactory::getInstance('Man');

$w = HumanFactory::getInstance('Woman');

$c = HumanFactory::getInstance('Child');

$m->display();

$w->display();

$c->display();

匿名工厂(生产对象时需要知道类名对应的符号):

class HumanFactory{

public static function getInstance($flag){

switch ($flag) {

case 'm':

return new Man();

case 'w':

return new Woman();

case 'c':

return new Child();

default:

return null;

}

}

}

$m = HumanFactory::getInstance('m');

$w = HumanFactory::getInstance('w');

$c = HumanFactory::getInstance('c');

标签:function,入门,public,file,var,PHP,class,面向对象编程,name

来源: https://www.cnblogs.com/chuanzi/p/10380555.html

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

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

相关文章

Java——多线程使用详解

多线程: 多线程就是同时执行多个应用程序,需要硬件的支持同时执行:不是某个时间段同时,cpu切换的比较快,所有用户会感觉是在同时运行 并发与并行: 并行(parallel):指在同一时刻,有多…

Java面向对象编程思想

面向对象三个特征:封装、继承、多态封装: 语法:属性私有化(private)、提供相对应的get/set 的方法进行访问(public)、 在set/get的方法中对属性的数据 做相对应的业务逻辑的判断 思想:封装外面的程序…

php边框的颜色 怎么设置,网页中table表格如何修改边框颜色

table表格是网页制作中以前较常使用的一种布局方式,但随着DIVCSS的兴起,table表格已辉煌不在。但它在我们制作网页中也是时有用到。table表格也可以使用DIV一样随意的设置它的边框颜色。下面介绍一下二种方法。方法一:使用CSS代码控制边框颜色…

看懂线程安全

目录: 线程安全线程同步同步代码块同步方法Lock锁线程状态图sleep睡眠等待和唤醒 1. 线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样 的,而且其他的变量的值也和预期的是…

oracle数据库生产,从安装系统到oracle数据库生产环境(centos6.8)搭建

大纲服务器安装JDK配置Oracle数据库安装配置1.安装服务器服务器的安装参考这篇教程关于安装中可能出现的几个问题,在这里进行解决:1、使用u盘安装完后,系统进入GRUB引导,无法启动:解决办法:出现上述状况的原…

WSDL4J解析WSDL文件方法

利用wsdl4j解析WSDL文件 工具&#xff1a;wsdl4j1.6 解析wsdl文件是axis1.4的服务wsdl文件 wsdl文件&#xff1a; <?xml version"1.0" encoding"UTF-8" ?>- <wsdl:definitions targetNamespace"http://localhost:8080/axis/services/SayH…

详解线程池

概念&#xff1a; 什么是线程池: 线程池是用来存储多线程的容器&#xff0c;是一种处理形式&#xff0c;处理过程中将任务添加到队列&#xff0c;然后在创建线程后自动启动这些任务。 线程池使用和不使用的区别&#xff1a; 因为系统创建线程池的成本很高&#xff0c;会涉及到…

git revert

1. 我认为这是正确的做法&#xff1a; git fetch --all git reset --hard origin/mastergit fetch下载远程最新的&#xff0c;但不尝试&#xff0c;或重订任何东西。 然后&#xff0c;git resetmaster分支重置到你刚才牵强。 2. 试试这个&#xff1a; git reset --hard HEAD gi…

oracle 内存分配,Oracle调优修改10g,11g内存分配

先查看数据库是否使用spfile启动&#xff0c;如果不是的话&#xff0c;只需要在pfile中修改&#xff0c;然后重启数据库即可SQL> show parameter spfile;NAME TYPE VALUE------------------------------------ ----------- ------------------------------spfile string D:\…

在sql server数据库的一个表中如何查询共有多少字段

select a.* from sys.columns a,sys.tables bwhere a.object_id b.object_id and b.name 要查的表名转载于:https://www.cnblogs.com/firstdream/p/6899224.html

oracle自带的sql语言环境变量,Oracle技术网—SQL*Plus系统环境变量有哪些?如何修改?...

实现方法&#xff1a;show和set命令是两条用于维护SQL*Plus系统变量的命令SQL> show all--查看所有68个系统变量值SQL> show user--显示当前连接用户SQL> show error                --显示错误SQL> set heading off--禁止输出列标题&#xff0c;默…

第二个冲刺周期第二天

昨天实现了基本登录界面&#xff0c;今天对登录界面进行了进一步完善&#xff0c;遇到的问题就是如何把登录跟主界面连接起来&#xff0c;明天继续完善登录界面。转载于:https://www.cnblogs.com/1998lu/p/6926154.html

oracle 导出数据 utl,使用utl_file做选择性数据导出

在平时的数据导出中使用exp/expdp能够满足绝大部分的数据导出任务。如果有一些表的数据不多&#xff0c;但是查询条件要复杂一些&#xff0c;使用exp/expdp就很吃力了。或者在和外部系统的交互中&#xff0c;使用xml或者文本文件是一个很兼容的选择&#xff0c;这个时候使用exp…

oracle 10g express linux,在Ubuntu下安装Oracle Database 10g Express Edition

Oracle 10g有一款XE版&#xff0c;意为体验版&#xff0c;限制是不支持多CPU和数据库大小不能超过2G(还有其他的什么&#xff0c;不记得了&#xff0c;Oracle官方网站有写)。对于开发的时候调试一下&#xff0c;体验一下还是够用的。关键大小比较适中&#xff0c;安装包200多M。…

表单打印功能

表单打印的2种方式 一、支持不同的浏览器 1、表单打印功能调用window.print() 就可以打印了 2、如果只打印表单上的一部分样式&#xff0c;将不想打印的部分写在media print中&#xff0c;隐藏掉 <style>   media print{     .Noprint{       display:none; …

oracle硬盘亮黄灯,RH2288H V3服务器硬盘亮黄灯故障处理案例

原标题&#xff1a;RH2288H V3服务器硬盘亮黄灯故障处理案例本文广州诚本将分享RH2288H V3服务器硬盘亮黄灯故障处理案例&#xff0c;希望对大家的工作有所帮助。问题描述某客户新开局的项目&#xff0c;采购一批RH2288H V3的服务器&#xff0c;做RAID时发现其中一台服务器一块…

5.Lock接口及其实现ReentrantLock

jdk1.7.0_79 在java.util.concurrent.locks这个包中定义了和synchronized不一样的锁&#xff0c;重入锁——ReentrantLock&#xff0c;读写锁——ReadWriteLock等。在已经有了内置锁synchronized的情况下&#xff0c;为什么又出现了Lock显示锁呢&#xff1f;本文将以Lock作为Ja…

oracle近三个月内,在oracle中的前三个月SQL

我有以下的sql&#xff0c;它给了我最后一整个三个月的人处理的档案报告&#xff0c;但我想采用它&#xff0c;以便从前三个月获得这些&#xff0c;例如&#xff0c;当我运行现在我应该从2011年10月11日和12日以及2012年1月2日和3日的4月份获得档案。有人可以提出一个建议&…

什么是递归

概念&#xff1a; 递归指的是方法定义中调用方法本身的现象&#xff08;自己调自己&#xff09;把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算 递归注意事项&#xff1a; 递归一定要有出口。…

错误问题

1、系统出现如下错误&#xff1a;warning: LF will be replaced by CRLF 原因分析&#xff1a; CRLF -- Carriage-Return Line-Feed 回车换行 就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。 这两个ACSII字符不会在屏幕有任何输出&#xff0c;但在Windows中广泛使用来标…