php学习笔记(一)

PHP 是一门弱类型语言
不必向 PHP 声明该变量的数据类型

PHP 变量

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名是区分大小写的 作用域

local

global

static

parameter

1
2
3
4
5
6
7
8
9
10
<?php
$x = 5;//全局变量
function myTest(){
$y=10;//局部变量
echo "$y";
echo "<br>";
echo "<p>hello<p>";
}
myTest();
?>

PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

Static 作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。

1
2
3
4
5
6
7
8
9
10
11
12
<?php 

function myTest()
{
static $x=0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>

PHP echo,print,print_r语句

echo - 可以输出一个或多个字符串

print - 只能输出简单类型变量的值,如int,string

print_r - 可以输出复杂类型变量的值,如数组,对象 使用时必须加上括号

1
2
3
4
5
6
7
8
<?php
$txt1="w3cschool.cn";;
$cars=array("ca","bmw");
echo "he ";
echo "Study PHP at $txt1";
echo "<br>";
echo "车品牌是{$cars[0]}";
?>

echo和print功能相同 即把所有的echo换成print
print_r 输出复杂类型变量的值,如数组,对象

1
2
3
4
5
6
7
8
<?php
$txt1="Hello World!";
$cars=array("Volvo","BMW","Toyota");

print_r($txt1);
echo "<br>";
print_r($cars);
?>

php常量

1
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

name
常量名。

value
常量的值;在 PHP 5 中,value 必须是标量( integer、 float、string、boolean、NULL)在 PHP 7 中还允许是个 array 的值。

Warning
常量还可以定义为 resource 类型,但并不推荐这样做,因为可能会有不可预知的行为发生。

case_insensitive
如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。比如, CONSTANT 和 Constant 代表了不同的值。

php字符串变量

strlen() 函数

1
2
3
<?php
echo strlen("Hello world!");
?>

strpos() 函数


strpos() 函数用于在字符串内查找一个字符或一段指定的文本。如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。

1
2
3
<?php
echo strpos("Hello world!","world");
?>

php数组

在 PHP 中,有三种类型的数组:

数值数组

数值数组 - 带有数字 ID 键的数组

1
2
3
4
5
<?php 
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
echo count($cars);
?>

关联数组

关联数组 - 带有指定的键的数组,每个键关联一个值

1
2
3
4
<?php 
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>

foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

foreach($age as $x=>$x_value){
echo $x." ".$x_value;
echo "<br>";

}

foreach($age as $x_value){
echo $x_value." ";
}
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<body>

<?php
$x=array("one","two","three");
foreach ($x as $value)
{
echo $value . "<br>";
}
?>

</body>
</html>

多维数组

多维数组 - 包含一个或多个数组的数组

数组排序

  • sort() - 对数组进行升序排列
  • rsort() - 对数组进行降序排列
  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列

php超级全局变量

$GLOBALS

$_SERVER

$_REQUEST

$_POST

$_GET

$_FILES

$_ENV

$_COOKIE

$_SESSION

php魔术常量

PHP 向它运行的任何脚本提供了大量的预定义常量。

不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

LINE

文件中的当前行号。

FILE

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

1
2
3
<?php 
echo "该文件位于'".__FILE__."'";
?>

DIR
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)

FUNCTION
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

CLASS
类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。

TRAIT
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

METHOD
类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

NAMESPACE
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

php命名空间

1.用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

2.为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。

在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。

命名空间使用

  • 非限定名称,或不包含前缀的类名称,例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。

  • 限定名称,或包含前缀的名称,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。

  • 完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。

PHP_EOL 为换行符。

面向对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$youj = new Site;
$taobao = new Site;
$google = new Site;
$youj->setTitle( "W3Cschool教程" );
$youj->getTitle();
<?php
class Site {
/* 成员变量 */
var $url;
var $title;
function setTitle($par){
$this->title = $par;
}
function getTitle(){
echo $this->title . PHP_EOL;
}
}
?>

构造函数和析构函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class MyDestructableClass {
function __construct() {
print "构造函数\n";
$this->name = "MyDestructableClass";
}

function __destruct() {
print "销毁 " . $this->name . "\n";
}
}

$obj = new MyDestructableClass();
?>

const**

public,protected,private

public(公有):公有的类成员可以在任何地方被访问。

protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。

private(私有):私有的类成员则只能被其定义所在的类访问。

配置及学习网站

https://blog.csdn.net/NewDayStudy/article/details/79094493

php null值