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
php是不是面向对象编程,PHP面向对象编程入门相关推荐
- 跟艾文学编程《零基础入门学Python》(4)Python 面向对象
作者: 艾文,计算机硕士学位,企业内训讲师和金牌面试官,公司资深算法专家,现就职BAT一线大厂. 邮箱: 1121025745@qq.com 博客:https://wenjie.blog.csdn.n ...
- php控制器面向对象编程,PHP 面向对象编程(2)
一些内建方法: class Person { public $isAlive = true; function __construct($name) { //这里我们创建了一个name的属性 $thi ...
- day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上/下造型,main方法,抽象类,接口,设计模式,异常,内部类
1 Day06–面向对象1 1.1 面向对象 1.1.1 概念 推荐看的书:Thinking in java 概念:所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的 ...
- day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上_下造型,main方法,抽象类,接口,设计模式,异常,内部类
1 Day06–面向对象1 1.1 面向对象 1.1.1 概念 推荐看的书:Thinking in java 概念:所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的 ...
- python面向对象的优点_Python面向对象编程——总结面向对象的优点
Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...
- php 取对象数据_过程式编程和面向对象编程有什么区别?怎么理解php对象的概念?...
PHP编程中对象的概念? 在上一篇文章咱们介绍了使用了php中的new pdo来连接数据库MYsql,其实在我们学习编程语言时经常会碰到"对象"这个词汇,准确来说是"面向 ...
- python面向对象编程的优点-Python面向对象编程——总结面向对象的优点
Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...
- 高阶函数||编程范式: 命令式编程/声明式编程 || 编程范式: 面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)
编程范式: 命令式编程/声明式编程 编程范式: 面向对象编程(第一公民:对象)/函数式编程(第一公民:函数) 高阶函数 filter/map/reduce filter中的回调函数有一个要求: 必须返 ...
- Java函数式编程和面向对象编程
文章目录 什么是函数式编程? 什么是面向对象编程? 函数式编程和面向对象编程的优缺点 什么是函数式编程? 函数式编程的核心:在思考问题时,使用不可变对象和函数,函数将一个值经过处理,映射成另一个值. ...
- pthon_函数式编程与面向对象编程的比较
函数式编程作为结构化编程的一种,正在受到越来越多的重视.工程中不在只是面向对象编程,更多的人尝试着开始使用函数式编程来解决软件工程中遇到的问题. 什么是函数式编程?在维基百科中给出了详细的定义,函数式 ...
最新文章
- NSTimer用法,暂停,继续,初始化
- Elasticsearch之CURL命令的PUT和POST对比
- 利用PyMySQL模块操作数据库
- POJ 1637 Sightseeing tour(最大流)
- BZOJ 4810 莫队+bitset
- mybatis_user_guide(6) Java API
- php静态分析工具window,window_SpeedPHP框架核心调试工具,在日常的编程开发当中,开发 - phpStudy...
- CSS3实现图形曲线阴形和翘边阴影
- WSL安装记录及相关
- Java基础篇:简单介绍一下final
- css不定高度实现垂直居中
- C++ STL 整理
- Axure教程-新手入门基础(小白强烈推荐!!!)
- 设计模式之适配器与外观模式(二)
- Linux下常用软件大比拼
- 计算机的存储功能是什么原因,电脑储存的意义是什么
- HTML5表白小程序
- 【哲学】笛卡尔天赋观念论理解
- 基于JSP动漫论坛的设计与实现(论文+PPT+源码
- 电路中滤波电容和退耦电容_关于滤波电容、去耦电容、旁路电容作用及其原理...
热门文章
- java 递归遍历对象所有属性_Java学习之Xml系列二:xml按条件查询、xml递归遍历所有元素和属性...
- linux mysql 性能提高,高手心得:提高MySQL性能的方法
- 我的第一个SpringBoot项目
- 悬浮窗java_Java制作一个简易的悬浮窗/PPT悬浮窗
- sklearn特征工程
- centos mysql 5.5.57_Centos MySQL 5.7安装、升级教程
- django 模板mysql_59 Django基础三件套 , 模板{{}}语言 , 程序连mysql Django项目app Django中ORM的使用...
- 北京大学计算机科学李丰,中文智能问答系统作业解析-北京大学计算机科学技术研究所.PDF...
- c语言程序中的if-else语句,C语言if else语句
- java中的.运算符_java中的各种运算符