php基础语法_面向对象

cnblogs 2024-06-14 08:39:01 阅读 94

PHP

php代码标记

多种标记来区分php脚本

ASP标记:<% php代码 %>

短标记:

脚本标记:

标准标记(常用):

简写风格:

ASP风格:<% php代码 %>

注意:简写风格和ASP风格需要在php.ini配置文件中修改以下配置为on,移植性差

short_open_tag = on

asp_tags = on

<html>

<body>

<b>

<?php

//脚本标记

echo 'hello world';

?>

</b>

</body>

</html>

php注释

行注释

//注释

注释

块注释

/*

注释

*/

php指令分隔符

;类似C语言,使用分号来结束指令

php数据类型

类型 说明
boolean布尔型 True and false
string字符串型 字符序列
integer整型 正负整数
float浮点型 整,小数
array数组 一组有序数据集合
object对象 对象是类的实例,使用new命令创建
resource资源
NULL

$ 是php变量的标识符,所有变量都以$字符开头,无论是申明还是调用

布尔型boolean

直接将true or false赋值给变量即可

<?php

$foo = True

?>

整型

<?php

$a = 1234;//十进制数

$a = -1234;//复数

$a = 0123;//八进制,(十进制83)

$a = 0x1A;//十六进制(十进制26)

$a = 0b11111111;//二进制数字(255)

?>

PHP_INT_MAX 64位下最大值大约为9E18,当整数溢出时,会转换成科学计数法格式定义的浮点数。

浮点型

<?php

$a = 1.234

$b = 1.2e3;//科学计数法

$c = 7e-10;//科学计数法,负指数

字符串

单引号

双引号

Heredoc结构

复合类型

数组

对象

特殊类型

资源resource

NULL

PHP模式修饰符

在正则匹配时,用来强化正则表达式的能力

可以写为/html/i or /(?i)html/两种格式,并且修饰符之间是不需要分隔符号的,直接连续书写即可

修饰符 说 明
i 匹配时不区分大小写
m 将字符串视为多行。^和$会匹配每一行的开始和结束点
s 将字符串是为一行,换行符会被视为普通的字符
x 忽略空白,转移的空白不会被忽略
e 只用在preg_replace函数中,在替换字符串中逆向引用做正常的替换,将其(即“替换的字符串”)作为php代码求值,并用结果来替换所搜索的字符串
A 匹配字符串的开头部分
D 如果设置该修饰符,模式中的元字符$仅会匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前(但不会匹配任何其他换行符之前)。如果设定了m修饰符则忽略此选项
E 与m相反,如果使用该修饰符,那么$将匹配绝对字符串的结尾,而不是换行符前,默认打开该模式
U 非贪婪模式,与元字符?的作用相等,最大限度的匹配是贪婪模式,最小限度的匹配时非贪婪模式,即惰性模式
s 单行模式

面向对象编程思想

  • 面向对象编程不是一种具体的技术,而是一种编程思想
  • 更方便与代码的重复利用
  • 一切皆对象
  • 所有的数据和功能都由主体(对象)来操作

跟面向过程的区别是,得先new一个对象,再去调用函数

面向对象基础

1.面向对象关键字说明

  • 类:class,是定义对象主体的最外层结构,用来包裹数据和函数,类是一类具有共性事物的代表。
  • 对象:object,是某类事物的具体代表,也是实际数据和功能操作的具体单元,也被称之为实例(instance)
  • 实例化:new,从一个抽象的概念得到一个符合抽象概念的具体实例的过程
  • 类成员:member,指class结构中创建的函数,类成员里有三种

2.面向对象简单技术实现

:根据对象分析后得到的一种通用结构(分类)

  • class关键字声明
  • 类名:自定义名字
  • 大括号

class 类名{

}

实例化:类产生对象的过程

new 类名;

new 类名(); #使用更多

对象:根据某个类产生的某个具体存在的实体(instance),对象一般使用变量保存

$object = new 类名();

步骤:

  • 根据需求产生类结构class
  • 分析类拥有的数据
  • 分析类的行为

示例

<?php

class Ok{

}

class IOS{

}

$n = new Ok();

$m = new IOS();

var_dump($n);

var_dump($m);

?>

# 打印结果:

# object(Ok)#1 (0) { } object(IOS)#2 (0) { }

# object:对象

# 数字是编号,代表第几个对象

# (Ok):所属类名

# (0):成员变量(属性)个数

# {}:具体成员变量信息(键值对)

类的命名规范

命名规范与函数类似,不能用数字开头

多单词用驼峰法:MyClass

3.类成员

目标:了解类成员的类型,作用,能够运用类成员去创建有效类

类成员

成员访问:属性和方法都属于对象访问,类常量属于类访问

类访问:

#实例化

$object = new 类名();

# 属性访问

$object->属性名; # 此时不带属性本身的$符号(前面保存-对象的变量带$符号,object->属性名是整体)

# 方法访问

$object->方法名([实参列表]);

步骤

  1. 声明类结构
  2. 明确类产生的对象是否需要有数据的存储:确定属性
  3. 明确类产生的对象是否需要函数实现功能:确定方法
  4. 明确类是否需要定义常量
  5. 对象实例化
  6. 类成员访问(属性和方法)

示例

<?php

class Buyer{

public $name;

public $money = 0;

function display(){

echo __CLASS__;

}

}

const BIG_NAME = 'BUYER';

$b = new Buyer();

$b->money = 10;

$b->eyes = 1;

unset($b->name);

var_dump($b);

$b->display();

?>

4.访问修饰限定符

修饰限定符:用在属性或者方法前的修饰关键字,用来控制属性或者方法的访问位置

  • 访问修饰限定符分类

​public:公有,类内类外都可以访问

​protected:受保护,只允许在相关类内部访问

​private:私有,只能在类内访问,为方法准备的

  • 属性必须有访问修饰限定符,方法可以没有,默认public

步骤

  1. 声明类结构
  2. 确定类成员
  3. 确定类成员的访问位置限定,使用对应访问修饰限定符
  4. 只能在对应位置访问被修饰的成员

示例

1.公有成员访问

<?php

class Saler{

#属性

public $count = 100;

#方法

public function getCount(){

echo __METHOD__;

}

public function setCount(){

echo __METHOD__;

}

}

#实例化对象

$s = new Saler();

#访问(类外)

echo $s->count;

$s->getCount();

$s->setCount();

?>

5.类内部对象

内部对象:$this,方法内部内置 的一个对象

2.类内部访问类成员,需要通过对象进行访问

<?php

class Saler{

public $count = 100;

protected $discount = 0.8;

private $money = 100;

public function getAll(){

global $s; # 需要获取到对象名字:因为方法本身就是函数,访问外部全局变量可以通过global引入实现

echo $s->count,$s->discount,$s->money;

}

}

$s = new Saler();

$s->getAll();

?>

3,使用内置对象$this访问

<?php

class Saler{

public $count = 100;

protected $discount = 0.8;

private $money = 100;

public function getAll(){

#global $s; # 需要获取到对象名字:因为方法本身就是函数,访问外部全局变量可以通过global引入实现

#cho $s->count,$s->discount,$s->money;

var_dump($this);

echo $this->count,$this->discount,$this->money;

}

}

$s = new Saler();

$s->getAll();

?>

$this代表的是对象,$this所在的环境为类内部的方法内部,所以$this对象是在类内部访问,因此可以访问所有的属性和方法,不受访问修饰限定符限制

6.面向对象的开发规范

  • 尽可能的增加类对成员的控制 ,尽多的使用private,少用public
  • 属性通常是私有化的,一般是通过设定方法来实现属性的访问和修改

7.构造方法

了解魔术方法的概念,明确触发模式,因为构造方法是魔术方法

构造方法:__construct(),是一种类结构特有的特殊方法,由系统规定好,有了构造方法的类在实例化对象之后,对象就会自动调用

  • 构造方法是一种魔术方法:魔术方法会被自动触发,不需要手动调用
  • 构造方法的目标市实现对象的初始化

​对象实例化会自动调用

​构造方法通常是为了实现对象所需资源的初始化

  • 构造方法本质还是一种方法

​受访问修饰限定符控制

​对象可以选择调用(一般不会)

  • 可以设定形参,对应的实参市在实例化对象的时候传入:new 类名(实参传递给形参)

示例

构造方法实现:

<?php

class Saler{

public fuction __construct(){

echo __CLASS__;

}

}

new Saler();

?>

一旦构造方法拥有了形参,那么对象在调用该方法的时候就应该传入对应的实参,而构造方法又是自动调用的,所以需要在实例化对象的时候使用new类名(构造方法对应的实参列表)来实现

<?php

class Saler{

public $count;

private $money;

public function __construct($count,$money){

echo __CLASS__;

#初始化

$this->count = $count;

$this->money = $money;

}

}

$s1 = new Saler(100,100);

$s2 = new Saler(999,999);

var_dump($s1,$s2);

?>

__construct()允许手动调用:

<?php

class Saler{

public $count;

private $money;

public function __construct($count,$money){

echo __CLASS__;

#初始化

$this->count = $count;

$this->money = $money;

}

}

$s1 = new Saler(100,100);

$s2 = new Saler(999,999);

$s2->__construct(0,0); #__construct()允许手动调用

var_dump($s1,$s2);

?>

小结

8.析构方法

主动调用析构方法

$s ->__destruct();

当主动调用析构方法,其实他就是只是一个普通的方法,不会销毁对象

析构方法是当对象销毁的时候调用

9.对象传值

小结:

对象传值方式是引用传值,不论对象如何被赋值给其他对象,始终只有一个内存地址。

10.范围解析操作符(类常量访问)

<?php

#范围解析操作符

class Saler{

const PI = 3.14;

}

$s1 = new Saler;

#echo $s1; #无法访问

echo Saler::PI;

echo $s1::PI; #范围解析操作符兼容对象,找到对象所属类,最终进行访问

?>

不过我们一般不建议使用echo $s1::PI;。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。