1. PHP 面向对象
1.1 与 C++区别
实例化:
声明对象时, 不用类名, 直接声明对象名
$a = new A(...);
this-> 或 对象名-> 后面的变量不用 $
每个成员前用 public protected private,像 java 一样
构造函数
void __construct([mixed args [, ...] ])
析构函数
void __destruct(void)
PHP 有 垃圾回收 机制, 自动清理 不再使用的对象,释放内存。一般不需要手动创建析构函数
继承
parent : 父类类名
self : 本类类名
class subClass extends superClass
{
...
};
多态
C++中虚 virtual 函数,到 PHP 中是用 抽象 abstract 函数
默认为 public 属性
1.2 作用域操作符 ::
class subClass extends superClass
{
const NAME = "subClass";
function __const()
{
parent::__construct();
echo self::NAME;
}
};
1.3 常用关键字等
static
静态成员 不用实例化对象, 类第1次加载时 就已分配了内存空间
final
修饰类时,该类不能再被继承
修饰函数时,该函数 不能被重写,不能被覆盖
关键字 abstract
抽象类 不能被实例化,至少有一个抽象方法
抽象方法 没有方法体, 其功能只能在子类中完成
用关键字 abstract 修饰
abstract class AbstractClass
{
...
};
abstract function abstractFun();
interface & implements
PHP 中只支持单继承,要想实现多继承,就要用接口类
接口类 用 interface声明, 类中方法都未实现
interface InterfaceClass
{
function f1();
}
子类 通过 implements 实现接口
class subClass implements InterfaceClass1, InterfaceClass2
{
function f1()
{
//功能实现
}
...
};
1.4 常用方法
对象类型 检测 : instanceof
objName instanceof ClassName
__set() __get()
通过对象 调用/写入 一个未定义 或 不可见(非 public, 即 protected private)的成员变量时,实际隐含地通过 __get() / __set() 方法 调用/写入
note: 通过对象 可以 看似直接调 protected/private 成员变量, 实际是 隐含间接通过 _get() / __set() 调
class A
{
public function __get($name)
{
...
}
public function __set($name, $value)
{
...
}
};
__call() : 2个参数,方法名 & 参数
通过对象 调用 一个未定义 或 不可见(非 public, 即 protected private)的成员方法时,实际隐含地通过 __call() 方法 调用
_toString() : 无参数
使用 echo 或 print 输出对象时(后面直接跟对象,不要加多余字符),实际是调 __toString() 把对象转化为字符串
class A
{
private $name = "TC";
public function __toString()
{
return $this->name;
}
};
$obj = new A;
echo $obj;
?>
__autoload()
require() include() 函数 可以在 php文件中 引入单个 特定 类文件
__autoload($className) 可以自动 引入 某个类对应的同名类文件
require('A.php');
$a = new A();
?>
A.php
class A
{
private $val;
public function __construct($val1)
{
$this->val = $val1;
}
public function __toString()
{
return $this->val;
}
};
?>
test.php
function __autoload($className)
{
$classPath = $className.".php";
if(file_exists($classPath))
include_once($classPath);
}
$a = new A("super");
echo $a;
?>
2. 与 Web 交互
PHP 与 Web 页面2种交互?
通过 Web 表单提交数据; 同 URL 参数传递
2.1 HTTP 协议
HTTP, HyperText Transfer Protocol 超文本传输协议, 是互联网上广泛使用的一种网络协议, 所有 WWW 文件都遵守该协议。
HTTP 是 客户端 和 服务器端 请求和应答的标准协议。
客户端:Web 浏览器
服务器端:网站
客户端发起1个指定端口(默认80)的 HTTP 请求, 服务器给出应答
2.2 Web 工作原理
浏览器 发 网址, 如 www.baidu.com,给 DNS服务器
DNS服务器 把 域名 解析为 IP地址,回给 浏览器
浏览器 通过 IP地址 找到对应的 Web服务器(通常是 Apache或Nginx), 发 HTTP Request 包给 Web服务器
Web 服务器 发现用户访问了后缀为 .php 的文件, 会 请求 PHP解析引擎来解析
PHP解析引擎 解析时,发现需要用的数据库,向数据库服务器请求数据
数据库服务器 返回 请求的数据
PHP 解析成 HTML.,返回给 Web 服务器
Web服务器 把 HTML 文件返回给 浏览器
image.png
2.3 HTML 表单
2.3.1 HTML
HTML Hyper Text Markup Language 超文本标记语言,是一种标记语言,而不是一种编程语言
标记语言 是一套 标记标签,通常是 HTML 标签:由 <> 包围的关键词,通常成对出现
新建 HTML文件的新建:新建 .txt 文件,编码格式改为 UTF-8(notePad->编码 -> 使用UTF-8编码), 改成 .html
2.3.2 HTML 表单 : 实现 浏览器与服务器交互
为实现 浏览器与服务器的互动,可使用 HTML表单 获取用户输入
HTML 表单 形式:用户注册、登录、个人中心设置
1. 创建 表单:
标签...
form标签的属性
name // 表单名称
method // 表单提交方式:GET 或 POST
action
enctype //表单内容编码方式
target //返回信息的显示方式
GET : 将表单内容附加在 URL 地址后发送
POST : 将表单中信息作为一个数据块发送到服务器
2. 表单元素
(1)输入域标签
type:
text
password
submit
file
image
radio
checkbox
reset
button
hidden
//eg:
(2)选择域标签
选项1
选项2
//eg:
计算机
软件工程
(3)文字域标签
...文本内容
2.3 CSS 美化表单页面
CSS 是一种标记语言, 用于为 HTML文档定义布局,涉及字体、颜色、边距、背景等
行内样式表
style 属性
hello
花木兰
内部样式表
在 HTML 文件内 用
h1 {color: blue}
p{background: yellow}
hello
花木兰
2.4 PHP获取表单数据
提交 表单
把表单 从 客户端 提交到 服务器, 本节只讲 POST 和 GET方法。
...
获取 POST方式提交的表单
POST方式:
(1)不依赖于 URL,不会显示在地址栏
(2)可以没有限制地传递数据到服务器, 所有提交的信息在后台传输
(3)适合发送 保密的 或者 数据量大的数据
$email = $_POST['email'];
$password = $_POST['password'];
array = $_POST;
print_r($_POST);
?>