PHP学习:
学习内容
函数,字符串,数组,日期和时间,变量,php运算符,类,面向对象
一.php函数
1.php创建用户定义函数
用户定义的函数声明以单词 “function” 开头:
1)简单调用函数
<?php
function book()
{
echo "Mr.Zhang<br>";
}
echo "The author of the book is ";
book();
?>
The author of the book is Mr.Zhang
2)函数中的函数
function people(){
function woman(){
echo "I am a becautiful woman"
}
}
people();//现在还不能调用woman()函数,因为它还不存在
woman();
I am a becautiful woman
2.php的参数
1)添加参数
function people($name,$year){
echo "$name was born in $year";
}
people("Jison","2000");
Jison was born in 2000
2)参数默认值
function person($age=18){
echo "Your age is: $age";
}
person(20);
person(); //将使用默认值 18
Your age is : 20
Your age is : 18
3)引用传递参数
function sentence(&$string){
$string.='Nice to meet to you';
}
$str='Hello!';
sentence($str);
echo $str;
Hello!Nice to meet to you
3.返回值
function sum($x,$y){
$z=$x+$y;
return $z;
}
echo "2+5=".sum(2,5);
2+5=7
二.字符串
1.并置字符串 (.)
$text1 = "Hello!";
$text2 = "Nice to meet to you.<br>";
echo $text1 . " " . $text2;
Hello! Nice to meet to you.
2.php strlen() 函数
返回字符串的长度(字节数)
echo strlen("Hello world!");
12
3.php str_word_count() 函数
对字符串中的单词进行计数
echo str_word_count("Hello world!");
2
4.php strrev() 函数
反转字符串
echo strrev("Hello world!");
!dlrow olleH
5.php strpos() 函数
strpos() 函数用于检索字符串内指定的字符或文本。
echo strpos("Hello world!","world");
6
1)如果找到匹配,则会返回首个匹配的字符位置。如果未找到匹配,则将返回 FALSE。
2)字符排序从0开始。
6.php str_replace() 函数
替换字符串中的文本
echo str_replace("world", "Kitty", "Hello world!");
Hello Kitty!
String 函数
bin2hex() | 把 ASCII 字符的字符串转换为十六进制值。 |
---|---|
hex2bin() | 把十六进制值的字符串转换为 ASCII 字符。 |
chop() | 删除字符串右侧的空白字符或其他字符。 |
ltrim() | 移除字符串左侧的空白字符或其他字符。 |
chunk_split() | 把字符串分割为一系列更小的部分。 |
count_chars() | 返回有关字符串中所用字符的信息。 |
echo() | 输出一个或多个字符串 |
print() | 输出一个或多个字符串。 |
printf() | 输出格式化的字符串。 |
lcfirst() | 把字符串的首字符转换为小写。 |
chr() | 从指定的 ASCII 值返回字符。 |
str_ireplace() | 替换字符串中的一些字符(对大小写不敏感)。 |
str_replace() | 替换字符串中的一些字符(对大小写敏感)。 |
strcasecmp() | 比较两个字符串(对大小写不敏感)。 |
strcmp() | 比较两个字符串(对大小写敏感)。 |
… | … |
三.php 数组
例子:
数组在单个变量中存储多个值:
$fruits=array("apple","orange","banana");
echo "I like " . $fruits[0] . ", " . $fruits[1] . " and " . $fruits[2] . ".";
I like apple, orange and banana.
在 PHP 中,array() 函数用于创建数组:
array();
获得数组的长度 - count() 函数
$fruits=array("apple","orange","banana");
echo count($fruits);
3
在 PHP 中,有三种数组类型:
-
索引数组 - 带有数字索引的数组
1)自动分配 ID 键(ID 键总是从 0 开始):$fruits=array("apple","orange","banana");
2)人工分配 ID 键:
$fruits[0] = "apple"; $fruits[1] = "orange"; $fruits[2] = "banana";
2)遍历索引数组
需遍历并输出索引数组的所有值,可以使用 for 循环:
$fruits=array("apple","orange","banana");
$arrlength=count($fruits);
for($x=0;$x<$arrlength;$x++) {
echo $fruits[$x];
echo "<br>";
}
apple orange banana
- 关联数组 - 带有指定键的数组
例子:
$price=array("apple"=>"10","orange"=>"5","banana"=>"3");
echo "apple's price is " . $price['apple'] . " yuan.";
apple’s price is 10 yuan.
$price=array("apple"=>"10","orange"=>"5","banana"=>"3");
$price['apple']="10";
$price['orange']="5";
$price['banana']="3";
3.遍历关联数组
如需遍历并输出关联数组的所有值,您可以使用 foreach 循环:
$price=array("apple"=>"10","orange"=>"5","banana"=>"3");
foreach($price as $x=>$x_fruit) {
echo "price=" . $x . ", fruit=" . $x_fruit;
echo "<br>";
}
price=apple, fruit=10
price=orange, fruit=5
price=banana, fruit=3
- 含一个或多个数组的数组
数组的维度指示您需要选择元素的索引数。
对于二维数组,您需要两个索引来选取元素
对于三维数组,您需要三个索引来选取元素
$cars = array
(
array("Volvo",33,20),
array("BMW",17,15),
array("Saab",5,2),
array("Land Rover",15,11)
);
echo $cars[0][0].": 库存:".$cars[0][1].", 已售:".$cars[0][2].".<br>";
echo $cars[1][0].": 库存:".$cars[1][1].", 已售:".$cars[1][2].".<br>";
echo $cars[2][0].": 库存:".$cars[2][1].", 已售:".$cars[2][2].".<br>";
echo $cars[3][0].": 库存:".$cars[3][1].", 已售:".$cars[3][2].".<br>";
Volvo: 库存:33, 已售:20.
BMW: 库存:17, 已售:15.
Saab: 库存:5, 已售:2.
Land Rover: 库存:15, 已售:11.
四.php date() 函数
date() 函数的格式参数是必需的,它们规定如何格式化日期或时间。
日期的字符:
- d - 表示月里的某天(01-31)
- m - 表示月(01-12)
- Y - 表示年(四位数)
- 1 - 表示周里的某天
时间的字符:
- h - 带有首位零的 12 小时小时格式
- i - 带有首位零的分钟
- s - 带有首位零的秒(00 -59)
- a - 小写的午前和午后(am 或 pm)
echo "今天是 " . date("Y/m/d") . "<br>";
echo "今天是 " . date("Y.m.d") . "<br>";
echo "今天是 " . date("Y-m-d") . "<br>";
echo "今天是 " . date("l");
echo "现在时间是 " . date("h:i:sa");
通过 PHP mktime() 创建日期
$d=mktime(9, 12, 31, 6, 10, 2015);
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
创建日期是 2015-06-10 09:12:31am
五.变量
PHP 变量规则:
- 变量以 $ 符号开头,其后是变量的名称
- 变量名称必须以字母或下划线开头
- 变量名称不能以数字开头
- 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
- 变量名称对大小写敏感($y 与 $Y 是两个不同的变量)
PHP 变量作用域
PHP 有三种不同的变量作用域:
- local(局部)
- global(全局)
- static(静态)
$x=5; // 全局作用域
function myTest() {
$y=10; // 局部作用域
echo "<p>测试函数内部的变量:</p>";
echo "变量 x 是:$x";
echo "<br>";
echo "变量 y 是:$y";
}
myTest();
echo "<p>测试函数之外的变量:</p>";
echo "变量 x 是:$x";
echo "<br>";
echo "变量 y 是:$y";
在函数内部测试变量:
变量 x 是:
变量 y 是:10
在函数之外测试变量:
变量 x 是:5
变量 y 是:
PHP global 关键词
global 关键词用于在函数内访问全局变量。
$x=5;
$y=10;
function myTest() {
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y;
15
类似:PHP 同时在名为 $GLOBALS[index] 的数组中存储所有的全局变量
$x=5;
$y=10;
function myTest() {
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;
PHP static 关键词
function nummber(){
static $x=0;
echo $x;
$x++;
}
myTest();
echo "<br>";
myTest();
echo "<br>";
myTest();
0
1
2
六.运算符
1.PHP 算数运算符
<?php
$x=8;
$y=4;
echo ($x + $y); // 输出 12
echo ($x - $y); // 输出 4
echo ($x * $y); // 输出 32
echo ($x / $y); // 输出 2
echo ($x % $y); // 输出 0
?>
2.PHP 赋值运算符
<?php
$x=17;
echo $x; // 输出 17
$y=17;
$y += 8;
echo $y; // 输出 25
$z=17;
$z -= 8;
echo $z; // 输出 9
$i=17;
$i *= 8;
echo $i; // 输出 136
$j=17;
$j /= 8;
echo $j; // 输出 2.125
$k=17;
$k %= 8;
echo $k; // 输出 1
?>
3.PHP 字符串运算符
<?php
$a = "Hello";
$b = $a . " world!";
echo $b; // 输出 Hello world!
$x="Hello";
$x .= " world!";
echo $x; // 输出 Hello world!
?>
Hello world!
Hello world!
4.PHP 递增/递减运算符
$x=2;$y=3;$z=4;$i=5;
echo ++$x;
echo ("<br>");
echo $y++;
echo ("<br>");
echo --$z;
echo ("<br>");
echo $i--;
3
3
3
5
5.PHP 比较运算符
$x=17;
$y="17";
var_dump($x == $y);
echo "<br>";
var_dump($x === $y);
echo "<br>";
var_dump($x != $y);
echo "<br>";
var_dump($x !== $y);
echo "<br>";
$a=17;
$b=8;
var_dump($a > $b);
echo "<br>";
var_dump($a < $b);
bool(true)
bool(false)
bool(false)
bool(true)
bool(true)
bool(false)
6.PHP 逻辑运算符
and | 与 |
---|---|
or | 或 |
xor | 异或 |
&& | 与 |
或 | |
! | 非 |
7.PHP 数组运算符
+ | 联合 |
---|---|
== | 相等 |
=== | 全等 |
!= | 不相等 |
<> | 不相等 |
!== | 不全等 |
<?php
$x = array("a" => "apple", "b" => "banana");
$y = array("c" => "orange", "d" => "peach");
$z = $x + $y; // $x 与 $y 的联合
var_dump($z);
echo "<br>";
var_dump($x == $y);
echo "<br>";
var_dump($x === $y);
echo "<br>";
var_dump($x != $y);
echo "<br>";
var_dump($x <> $y);
echo "<br>";
var_dump($x !== $y);
?>
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
8.三元运算符
$a='1+2=3';
$b=($a)?$a:'2';
echo $b;
1+2=3
七.类
基本概念
1.每个类的定义都以关键字 class开头,后面跟着类名,后面跟着一对花括号,里面包含有类的属性与方法的定义。
2.一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)
(1) 简单的类定义
<?php
class SimpleClass
{
// 声明属性
public $var = 'a default value';
// 声明方法
public function displayVar() {
echo $this->var;
}
}
?>
(2)$this 伪变量的示例
<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this is not defined.\n";
}
}
}
class B
{
function bar()
{
A::foo();
}
}
$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>
(3)创建实例
<?php
$instance = new SimpleClass();
// 也可以这样做:
$className = 'Foo';
$instance = new $className(); // Foo()
?>
(4) 对象赋值
<?php
$instance = new SimpleClass();
$assigned = $instance;
$reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // $instance and $reference become null
var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>
NULL
NULL
object(SimpleClass)#1 (1) {
[“var”]=>
string(30) “$assigned will have this value”
}
(5) 创建新对象
<?php
class Test
{
static public function getNew()
{
return new static;
}
}
class Child extends Test
{}
$obj1 = new Test();
$obj2 = new $obj1;
var_dump($obj1 !== $obj2);
$obj3 = Test::getNew();
var_dump($obj3 instanceof Test);
$obj4 = Child::getNew();
var_dump($obj4 instanceof Child);
?>
bool(true)
bool(true)
bool(true)
(6)访问新创建对象的成员
<?php
echo (new DateTime())->format('Y');
?>
2016
八.面向对象
面向对象内容:
类 | 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作 |
---|---|
对象 | 是类的实例 |
成员变量 | 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性 |
成员函数 | 定义在类的内部,可用于访问对象的数据 |
继承 | 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容 |
父类 | 一个类被其他类继承,可将该类称为父类,或基类,或超类 |
子类 | 一个类继承其他类称为子类,也可称为派生类 |
多态 | 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性 |
重载 | 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法 |
抽象性 | 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关 |
封装 | 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内 |
构造函数 | 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 |
析构函数 | 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放) |
PHP 类定义
解析如下:
- 类使用 class 关键字后加上类名定义。
- 类名后的一对大括号({})内可以定义变量和方法。
- 类的变量使用 var 来声明, 变量也可以初始化值。
- 函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。
<?php
class Site {
/* 成员变量 */
var $url;
var $title;
/* 成员函数 */
function setUrl($par){
$this->url = $par;
}
function getUrl(){
echo $this->url . PHP_EOL;
}
function setTitle($par){
$this->title = $par;
}
function getTitle(){
echo $this->title . PHP_EOL;
}
}
?>
变量 $this 代表自身的对象。
PHP_EOL 为换行符。
调用成员方法
class Person {
/* 成员变量 */
var $name;
var $age;
/* 成员函数 */
function setname($b){
$this->name = $b;
}
function getname(){
echo $this->name;
}
function setage($b){
$this->age = $b;
}
function getage(){
echo $this->age;
}
}
$b=new Person;
$b->setname("July\n");
$b->setage("5");
$b->getname();
$b->getage();
July 5
构造函数
class Person{
/* 成员变量 */
var $name;
var $age;
/* 成员函数 */
function __construct( $part1, $part2 ){
$this->name = $part1;
$this->age=$part2;
}
function setname($b){
$this->name = $b;
}
function getname(){
echo $this->name;
}
function setage($b){
$this->age = $b;
}
function getage(){
echo $this->age;
}
}
$b=new Person("July\n","5");
$b->getname();
$b->getage();
July 5