编程词典(方便查找某个函数或者知识点):http://www.php.cn/dic/29.html
更多请查看PHP参考手册,PHP官方文档
0.php的代码部份全部要用半角的英文、很多人容易写成全角的英文和符号造成PHP代码报错。
1. echo显示命令:echo "
2.注释:同C++,//单行,/*多行*/
3.变量:以$开头,不区分大小写,无需声明类型直接赋值创建(弱类型语言),
4.变量作用域:
全局变量:函数外定义的变量,可以被脚本中的任何部分访问(注意函数要访问全局变量的时候要加global 关键字,不然就不知它是全局变量还是该函数要定义的局部变量了)
局部变量,在函数里面定义的变量,只在该函数内访问。(可以用static声明局部变量防止该变量被删除)
";
//函数访问全局变量方法一
global $x;
echo "全局变量 x 为: $x";
echo "
";
//函数访问全局变量方法二
echo "全局变量 x 为: ";
echo $GLOBALS['x'];
echo "
";
// 在函数内部, 声明全局变量,但不能直接赋值...
global $c, $d;
$c = '函数内可以';
$d = '声明全局变量';
}
myTest();
echo $c . $d;
echo "
";
function test2()
{
//加上static的局部变量,函数调用完后不会被删除。
static $x = 0;
echo $x;
$x++;
}
test2();
test2();
test2();
test2();
?>
5.输出语句:echo 和 print 语句
6.数据类型:Integer(整型)Float(浮点型)Boolean(布尔型)String(字符串)Array(数组)Object(对象)NULL(空值)
【var_dump() 是一个函数。向括号()中间插入变量。这个函数,会打印出来数据类型,还会对应显示变量的长度和值。
empty()可以向括号中间传入一个变量。这个变量的值如果为false或者为null的话,返回true。
isset()可以向括号中间传入一个或者多个变量,变量与变量间用逗号分开。只要有有一个变量为null,则返回false。否则,则返回true。
unset()这个函数的功能是毁掉变量。unset(变量)括号中间插入想要毁掉的变量名,这个变量就会被毁掉。】
7.字符串:当您赋一个文本值给变量时,请记得给文本值加上单引号或者双引号。
【并置运算符.(点)用于把两个字符串值连接起来。例如:echo $txt1 . " ---" . $txt2;
strlen() 函数返回字符串的长度(字符数),注意:在UTF-8下中文占三个字符数。提示:strlen() 常常用在循环和其他函数中,因为那时确定字符串何时结束是很重要的。(例如,在循环中,我们需要在字符串中的最后一个字符之后结束循环。)
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
】
8.常量: define("GREETING", "Welcome to PHP.cn!"); echo GREETING;
【无需$开头,默认全局,函数访问无需加global。默认对大小写敏感,可以define("GREETING", "Welcome to PHP.cn!",true);创建对大小写不敏感的常量
内置常量了解一下】
9.运算符
算术运算符:+ - * / %(取余)
赋值运算符:= .=($x .= $y即$x = $x . $y) 算术运算符=
自增/自减运算符:++ --(用法同C++)
比较运算符:> < >= =< == ===(要求值和类型都要相同) != (也可以写成<>) !==(值和类型都不能相等)
逻辑运算符:&&(也可以用and) ||(也可以用or) ! xor(异或,一真一假的时候才返回true)
数组运算符:+(联合但不覆盖重复的部分)== ===(要求值、顺序和类型都要相同) != (也可以写成<>) !==(值、顺序和类型都不能相等)
三目运算符:(expr1)?(expr2):(expr3); //表达式1?表达式2:表达式3 (用法同C++)
10.if语句 ------同C++
11.switch -------同C++
';
}
12.数组
【只要事先声明下标,数组下标可以不从0开始。
count($变量) 函数用于返回数组的长度(元素数)
可以用for循环遍历索引数组
可以用foreach循环遍历关联数组、下标不连续数组
数组排序:升序(数字从小到大,字母A-Za-z),方法:升序sort()、降序rsort()、根据值asort()、arsort()、根据键ksort()、krsort()
多维数组了解一下】
'; //echo pre这个标签的主要目的是为原样输出,格式展示的更好看,更清晰
var_dump($array);
echo '';
echo "
";
//关联数组,用[]创建数组
$arr = [
'name' => 'Tom',
'age' => '18',
'gender' => 'male',
];
echo "";
var_dump($arr);
echo "
";
echo "
";
//用for循环遍历索引数组
$arr = array('tom', 'andy', 'jack');
$arrlength = count($arr);
for ($x = 0; $x < $arrlength; $x++) {
echo $arr[$x];
echo "
";
}
echo "
";
//用foreach循环遍历关联数组、下标不连续数组
$arr = [
'name' => 'Tom',
'age' => '18',
'gender' => 'male',
];
foreach ($arr as $key => $value) {
echo $key . ": " . $value . "
";
}
13.循环while、do...while、for语句 ----同C++
【还有foreach语句】
';
}
14.超全局变量:通常是预定义变量,全部作用域中都可用,在函数或方法中无需执行 global 。
· $GLOBALS
$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。函数内用$GLOBALS['x']访问全局变量x
· $_SERVER
$_SERVER 是一个包含了诸如当前脚本文件名,所在服务器ip,端口号,通信协议,请求时间戳,引导用户代理到当前页的前一页的地址等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
· $_REQUEST
PHP $_REQUEST 用于收集HTML表单提交的数据。
· $_POST
$_POST 变量用于收集来自 method="post" 的表单中的值
· $_GET
PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多100个字符)。
· $_FILES
· $_ENV
· $_COOKIE
· $_SESSION
15.魔术常量
PHP 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
__LINE__:文件中的当前行号。
__FILE__:文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
__DIR__:文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
__FUNCTION__:函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__CLASS__:类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
__TRAIT__:Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
__METHOD__:类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__:当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
16.命名空间:解决命名冲突
【要写在文件最开头位置,除了声明编码方式declare(encoding='UTF-8'); ,命名空间前面不能有其他种类的语句
命名空间可以分层次(子命名空间):namespace MyProject\Sub\Level;
在文件系统中访问一个文件有三种方式:
1. 相对文件名形式如foo.txt。它会被解析为 currentdirectory/foo.txt,其中 currentdirectory 表示当前目录。因此如果当前目录是 /home/foo,则该文件名被解析为/home/foo/foo.txt。
2. 相对路径名形式如subdirectory/foo.txt。它会被解析为 currentdirectory/subdirectory/foo.txt。
3. 绝对路径名形式如/main/foo.txt。它会被解析为/main/foo.txt。
命名空间同理:
";
}
class foo
{
public static function staticmethod()
{
echo "Foo\Bar\'namespace\'foo::staticmethod";
echo "
";
}
}
";
}
class foo
{
public static function staticmethod()
{
echo "Foo\Bar\'foo::staticmethod";
echo "
";
}
}
/* 非限定名称 */
foo(); // 解析为 Foo\Bar\foo resolves to function Foo\Bar\foo
foo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod。resolves to class Foo\Bar\foo, method staticmethod
echo FOO; // resolves to constant Foo\Bar\FOO
echo "
";
/* 限定名称 */
subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,
// 以及类的方法 staticmethod
echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO
echo "
";
/* 完全限定名称 */
\Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
echo "
";
命名空间和动态语言特征
namespace关键字和__NAMESPACE__常量
使用命名空间:别名/导入,使用use操作符导入/使用别名
使用命名空间:后备全局函数/常量
全局空间
命名空间的顺序
】
17.面向对象
【类、对象、成员变量、成员函数、构造函数、析构函数、继承、父类、子类、访问控制、多态、重载、抽象、封装
构造函数:void __construct ([ mixed $args [, $... ]] )
析构函数:void __destruct ( void )
继承和方法重写:
url = $par;
}
public function getUrl()
{
echo $this->url . "
";
}
public function setTitle($par)
{
$this->title = $par;
}
public function getTitle()
{
echo $this->title . "
";
}
//构造函数
//下面一行的参数1和参数2没有值,会出现Warning,可以写成
// public function __construct($par1 = '', $par2 = '')
public function __construct($par1, $par2)
{
$this->url = $par1;
$this->title = $par2;
}
//析构函数
public function __destruct()
{
print "销毁 " . $this->title . "
";
}
}
// 调用成员函数,设置标题和URL
$php = new Site;
$php->setTitle("php中文网");
$php->setUrl('www.php.cn');
// 调用构造函数,设置标题和URL
$taobao = new Site('www.taobao.com', '淘宝');
// 调用成员函数,获取标题和URL
$php->getTitle();
$php->getUrl();
$taobao->getTitle();
$taobao->getUrl();
// 继承:子类扩展站点类别
class Child_Site extends Site
{
public $category;
public function setCate($par)
{
$this->category = $par;
}
public function getCate()
{
echo $this->category . "
";
}
//方法重写:重写父类的方法
public function getUrl()
{
echo "网址:";
echo $this->url . "
";
}
}
echo "
";
$google = new Child_Site;
$google->setTitle("Google 搜索");
$google->setUrl("www.google.com");
$google->setCate("搜索引擎");
$google->getTitle();
$google->getUrl();
$google->getCate();
访问控制:PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。
· public(公有):公有的类成员可以在任何地方被访问。(如果用 var 定义,也被视为公有。)
· protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
· private(私有):私有的类成员则只能被其定义所在的类访问。
接口:使用接口(interface),可以指定某个类必须实现哪些方法(可以直观看出类肯定会实现的部分功能),但不需要定义这些方法的具体内容。接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。接口中定义的所有方法都必须是公有,这是接口的特性。要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
vars[$name] = $var;
}
public function showArray($template)
{
foreach ($this->vars as $name => $value) {
echo $name . "=>" . $value . "
";
}
}
}
$arr = new Template();
$arr->setArray("key1", "value1");
$arr->setArray("key2", "value2");
$arr->showArray();
常量:
";
}
}
echo MyClass::constant . "
";
$classname = "MyClass";
echo $classname::constant . "
"; // 自 5.3.0 起
$class = new MyClass();
$class->showConstant();
echo $class::constant . "
"; // 自 PHP 5.3.0 起
?>
抽象类:抽象类不需要写具体的功能实现,子类继承的时候再实现功能,对于子类功能各不相同的情况下,父类就不必写具体的功能实现,直接写成抽象类,然后子类继承抽象类,能直观看出子类具有抽象类的特征,是一种提示。(其实完全不用抽象类也可以,只是某些情况下,抽象类更加简便符合逻辑。)
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。定义为抽象的类不能被实例化。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
参考:http://www.runoob.com/php/php-oop.html 抽象类部分
static关键字:声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
final关键字:PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
调用父类构造方法:PHP 子类会继承父类的构造方法,但是重写子类构造方法的时候不会自动调用父类的构造方法,需要在子类的构造方法中调用 parent::__construct()。
】