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 "<h1>你好,世界!<h1>";

2.注释:同C++,//单行,/*多行*/

3.变量:$开头,不区分大小写,无需声明类型直接赋值创建(弱类型语言),

4.变量作用域:

全局变量:函数外定义的变量,可以被脚本中的任何部分访问(注意函数要访问全局变量的时候要加global 关键字,不然就不知它是全局变量还是该函数要定义的局部变量了)

局部变量,在函数里面定义的变量,只在该函数内访问。(可以用static声明局部变量防止该变量被删除)

<?php
header("Content-type:text/html;charset=utf-8");
$x = 5; // 全局变量

function myTest()
{
    $y = 10; // 局部变量
    echo "myTest()局部变量 y 为: $y";
    echo "<br>";
    //函数访问全局变量方法一
    global $x;
    echo "全局变量 x 为: $x";
    echo "<br>";
    //函数访问全局变量方法二
    echo "全局变量 x 为: ";
    echo $GLOBALS['x'];
    echo "<br>";
    // 在函数内部, 声明全局变量,但不能直接赋值...
    global $c, $d;
    $c = '函数内可以';
    $d = '声明全局变量';

}

myTest();
echo $c . $d;
echo "<hr>";

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++

<?php
 header("Content-type:text/html;charset=utf-8");    //设置编码
 //得到今天是星期几的英文简称
 $day = date('D');
 
 switch($day){
     //拿学校举例,我们让星期一、二、三是校长日
     case 'Mon':
     case 'Tue':
     case 'Wed':
         echo '校长日';
         break;
     case 'Thu':
         echo '星期四';
         break;
     case 'Fri':
         echo '星期五';
         break;
     default:
         echo '周末,周末过的比周一到周五还要累<br />';
 }

12.数组

【只要事先声明下标,数组下标可以不从0开始。

count($变量) 函数用于返回数组的长度(元素数)

可以用for循环遍历索引数组

可以用foreach循环遍历关联数组、下标不连续数组

数组排序:升序(数字从小到大,字母A-Za-z),方法:升序sort()、降序rsort()、根据值asort()、arsort()、根据键ksort()、krsort()

多维数组了解一下】

<?php
header("Content-type:text/html;charset=utf-8"); //设置编码
$array = array(100, 1.34, true, "PHP中文网");
echo '<pre>'; //echo pre这个标签的主要目的是为原样输出,格式展示的更好看,更清晰
var_dump($array);
echo '<pre/>';
echo "<hr>";

//关联数组,用[]创建数组
$arr = [
    'name'   => 'Tom',
    'age'    => '18',
    'gender' => 'male',
];
echo "<pre>";
var_dump($arr);
echo "</pre>";
echo "<hr>";

//用for循环遍历索引数组
$arr       = array('tom', 'andy', 'jack');
$arrlength = count($arr);
for ($x = 0; $x < $arrlength; $x++) {
    echo $arr[$x];
    echo "<br/>";
}
echo "<hr>";

//用foreach循环遍历关联数组、下标不连续数组
$arr = [
    'name'   => 'Tom',
    'age'    => '18',
    'gender' => 'male',
];
foreach ($arr as $key => $value) {
    echo $key . ": " . $value . "<br />";

}

13.循环while、do...while、for语句   ----同C++

【还有foreach语句】

<?php
//乘法口诀表
for ($i = 1; $i < 10; $i++) {
    //1x1=1,2x2等于4,所以第二次循环的最大值为$i的值,因此$j=1, $j在循环自加的过程当中,只能够小于等于$i

    for ($j = 1; $j <= $i; $j++) {
        //  1 x 2 = 2   2 x 2 = 4啦
        echo $j . 'x' . $i . '=' . ($i * $j) . '   ';
    }
    echo '<br />';

}

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。

命名空间同理:

<?php
//file1.php
namespace Foo\Bar\subnamespace;

const FOO = 1;
function foo()
{
    echo "Foo\Bar\'namespace\'foo()";
    echo "<br>";
}
class foo
{
    public static function staticmethod()
    {
        echo "Foo\Bar\'namespace\'foo::staticmethod";
        echo "<br>";
    }
}
<?php
namespace Foo\Bar;

include 'file1.php';

const FOO = 2;
function foo()
{
    echo "Foo\Bar\'foo()";
    echo "<br>";
}
class foo
{
    public static function staticmethod()
    {
        echo "Foo\Bar\'foo::staticmethod";
        echo "<br>";
    }
}

/* 非限定名称 */
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 "<br>";

/* 限定名称 */
subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,
// 以及类的方法 staticmethod
echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO
echo "<br>";

/* 完全限定名称 */
\Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
echo "<br>";

命名空间和动态语言特征

namespace关键字和__NAMESPACE__常量

使用命名空间:别名/导入,使用use操作符导入/使用别名 

使用命名空间:后备全局函数/常量

全局空间

命名空间的顺序

 

17.面向对象

【类、对象、成员变量、成员函数、构造函数、析构函数、继承、父类、子类、访问控制、多态、重载、抽象、封装

构造函数:void  __construct ([ mixed $args [, $... ]] )

析构函数:void __destruct ( void )

继承和方法重写:

<?php
header("Content-type:text/html;charset=utf-8"); //设置编码
//加上下面三行可以防止页面出现Warining和Noteic警告
ini_set("display_errors", 0);
error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL ^ E_WARNING);
class Site
{
    /* 成员变量 */
    public $url;
    public $title;

    /* 成员函数 */
    public function setUrl($par)
    {
        $this->url = $par;
    }

    public function getUrl()
    {
        echo $this->url . "<br/>";
    }

    public function setTitle($par)
    {
        $this->title = $par;
    }

    public function getTitle()
    {
        echo $this->title . "<br/>";
    }
    //构造函数
    //下面一行的参数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 . "<br>";
    }
}

// 调用成员函数,设置标题和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 . "<br/>";
    }
    //方法重写:重写父类的方法
    public function getUrl()
    {
        echo "网址:";
        echo $this->url . "<br/>";
    }
}
echo "<hr>";
$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 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

<?php
// 声明一个'SetAndShowArray'接口
//加上下面三行可以防止页面出现Warining和Noteic警告
ini_set("display_errors", 0);
error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL ^ E_WARNING);
interface SetAndShowArray
{
    public function setArray($name, $var);
    public function showArray($template);
}
// 实现接口
class Template implements SetAndShowArray
{
    private $vars = array();
    public function setArray($name, $var)
    {
        $this->vars[$name] = $var;
    }
    public function showArray($template)
    {
        foreach ($this->vars as $name => $value) {
            echo $name . "=>" . $value . "<br>";
        }
    }
}
$arr = new Template();
$arr->setArray("key1", "value1");
$arr->setArray("key2", "value2");
$arr->showArray();

常量:

<?php
 class MyClass
 {
     const constant = '常量值';
 
     function showConstant() {
         echo  self::constant . "<br/>";
     }
 }
 
 echo MyClass::constant . "<br/>";
 
 $classname = "MyClass";
 echo $classname::constant . "<br/>"; // 自 5.3.0 起
 
 $class = new MyClass();
 $class->showConstant();
 
 echo $class::constant . "<br/>"; // 自 PHP 5.3.0 起
 ?>

抽象类:抽象类不需要写具体的功能实现,子类继承的时候再实现功能,对于子类功能各不相同的情况下,父类就不必写具体的功能实现,直接写成抽象类,然后子类继承抽象类,能直观看出子类具有抽象类的特征,是一种提示。(其实完全不用抽象类也可以,只是某些情况下,抽象类更加简便符合逻辑。)

任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。定义为抽象的类不能被实例化。

被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。

参考:http://www.runoob.com/php/php-oop.html  抽象类部分

static关键字:声明类属性或方法为 static(静态),就可以不实例化类而直接访问。

final关键字:PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

调用父类构造方法:PHP 子类会继承父类的构造方法,但是重写子类构造方法的时候不会自动调用父类的构造方法,需要在子类的构造方法中调用 parent::__construct()。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值