PHP学习笔记——环境安装/基础知识

参考资料:http://www.php.cn/course/2.html

编程词典(方便查找某个函数或者知识点):http://www.php.cn/dic/29.html

更多请查看PHP参考手册,PHP官方文档

一.环境安装:http://www.php.cn/code/25.html

二.基础知识(只记录大致功能,具体使用方法以其原理查看资料文档):

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()。

 

 

 

你可能感兴趣的:(PHP)