php学习2

php输出语句

echo 'hello php';
echo 'hello', 'world';

------------
// print 与 echo 唯一区别就是只能有一个参数
print 'hello php';
------------
// var_dump 是一个函数,必须跟上 () 调用
// 可以将数据以及数据的类型打印为特定格式
var_dump('hello php');
// => 'string(9) "hello php"'

作业 循环数据到表格

文件读写参考地址:http://www.w3school.com.cn/php/php_ref_filesystem.asp


二维数组分割参考地址:https://zhidao.baidu.com/question/1052777725879858819.html


换行符参考地址:https://segmentfault.com/q/1010000006994684


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Page Title</title>
</head>
<body>
    <?php
    $str = file_get_contents("names.txt");
    $arr = explode(PHP_EOL, $str);
    echo "<table border='1'>";
    foreach ($arr as $key => $value) {
        echo ($key);
        echo "<tr>";
        $arrd = explode("|", $value);
        echo "<td>" . $arrd[0] . "</td>";
        echo "<td>" . $arrd[1] . "</td>";
        echo "<td>" . $arrd[2] . "</td>";
        echo "<td>" . $arrd[3] . "</td>";
    }
    echo "</tr>";
    echo "</table>";
    ?>
</body>
</html>

提前练习:遍历数组


foreach参考地址:https://zhidao.baidu.com/question/52885736.html


<?php
$arr = array(//定义外层数组
    array(1, '高某', 'A公司', '北京市'),
    array(2, '谢某', 'B公司', '上海市'),
    array(3, '王某', 'C公司', '湖南'),
    array(4, '徐某', 'D公司', '河北')
);
// 第一种
for ($i = 0; $i < count($arr); $i++) {
    for ($j = 0; $j < count($arr[$i]); $j++) {
        echo $arr[$i][$j];
    }
    echo "<br/>";
}
//第二种
foreach ($arr as $key => $value) {
    foreach ($value as $j) {
        echo $j[0];
        # code...
    }
    echo "</br>";
}
?>

今天配置虚拟主机添加了一个 ServerAlias



老师做的表格

trim()参考地址:http://www.w3school.com.cn/php/func_string_trim.asp

作用:移除字符串两侧的空白字符或其他预定义字符。

strpos()参考地址:http://www.w3school.com.cn/php/func_string_strpos.asp

作用:查找字符串在另一字符串中第一次出现的位置

没找到返回的是false


strtolower()参考地址: http://www.w3school.com.cn/php/func_string_strtolower.asp

所有字符转换为小写

substr()参考地址:http://www.w3school.com.cn/php/func_string_substr.asp

返回字符串的一部分
<?php
$str = file_get_contents("names.txt");
$lines = explode(PHP_EOL, $str);
foreach ($lines as $value) {
    if (!$value) continue;
    $data[] = explode("|", $value);
}

?>



<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <table border='1'>
        <thead>
            <tr>
                <td>编号</td>
                <td>姓名</td>
                <td>年龄</td>
                <td>邮箱</td>
                <td>主页</td>
            </tr>
        </thead>
        <?php foreach ($data as $value_v) : ?>
            <tr>
                <?php foreach ($value_v as $xiangxivalue) : ?>
                    <?php $xiangxivalue = trim($xiangxivalue); ?>
                    <?php if (strpos($xiangxivalue, "http://") === 0) : ?>
                        <td><a href="<?php echo strtolower($xiangxivalue) ?>;"><?php echo substr($xiangxivalue, 7); ?></a></td>
                    <?php else : ?>
                        <td><?php echo $xiangxivalue ?></td>
                    <?php endif ?>
                <?php endforeach ?>
            </tr>
        <?php endforeach ?>
    </table>
</body>

</html>

用模块里面的API(以mb_strlen()为例子)

使用mb的API报错

1.解决方法:复制一份改成php.ini

2.设置extension_dir

3.找到需要的模块解开注释

4.查看把php.ini放在那个目录


5.在查看phpinfo();


6.重新启动apq,测试(ok)

7.在自己目录设置php.ini 需要设置apache,httpd.conf里面的:PHPIniDir


8.测试是否配置成功(ok)

老师的配置流程

// PHP 所有能力都是函数,内置1000多个函数

$str = 'hello';
// 获取字符串长度

echo strlen($str);

echo '<br>';

// 获取中文字符串(宽字符)的长度
// strlen 只能获取拉丁文的长度
// 内置成员函数直接使用
echo strlen('你好');

echo '<br>';

// PHP 中专门为 宽字符集 添加了一套 API
// 这一套 API 不在内置的 1000+ 里面,而是在一个模块(php_mbstring.dll)中
// 模块成员必须通过配置文件载入模块过后再使用
// 所有的API 都是 mb_xxxx
echo mb_strlen('你好');


// 配置 PHP 扩展的步骤
// 1. 在 PHP 的安装目录去创建一个 php.in
// 2. extension_dir
// 3. ;extension=php_mbstring.dll
// 4. 默认Apache加载的php.ini 是去 Windows目录找的
// 5. 可以通过 Apache 的配置文件修改默认加载路径 PHPIniDir

php中的REPL环境

字符串数字补0


参考地址:https://www.jb51.net/article/49956.htm

php.ini 中 display_errors = On 设置

老师在这个地方点出了display_errors = On 是干嘛用的

(On)才会在界面上显示 notice 错误

开发阶段一定设置为 On 生产阶段(上线)设置为 Off> 开发阶段一定设置为 On 生产阶段(上线)设置为 Off

php数组学习

array_keys — 返回数组中部分的或所有的键名


array_values — 返回数组中所有的值


array_key_exists — 检查给定的键名或索引是否存在于数组中

// 类型:  1. 索引数组  2. 关联数组
// 方式:  1. array()  2. [] (PHP 5.4)

$dict = array(
  'hello' => '你好',
  'hello1' => '你好',
  'hello2' => '你好',
);



var_dump(array_keys($dict));
// => ['hello', 'hello1', 'hello2']

var_dump(array_values($dict));
// => ['你好', '你好', '你好']

var_dump(array_key_exists('hello', $dict));//true
var_dump(array_key_exists('hello4', $dict));//false

isset和empty学习

isset — 检测变量是否设置


empty — 检查一个变量是否为空

如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。
isset
<?php
$var = '';
var_dump(isset($var));

$a = 'test';
$b = 'anothertest';
var_dump(isset($a));
var_dump(isset($b));
unset($a);
var_dump(isset($a));
var_dump(isset($a, $b));
var_dump(isset($b));
$foo = null;
var_dump(isset($foo));


// 数组中的元素
echo '===========================', '<br/>';


$a = array('test' => 1, 'hello' => null, 'pie' => array('a' => ' apple '));

var_dump(isset($a['test']));
var_dump(isset($a['foo']));
var_dump(isset($a['hello']));
var_dump(array_key_exists('hello', $a));

echo '===========================', '<br/>';
var_dump(isset($a['pie']['a']));
var_dump(isset($a['pie']['b']));
var_dump(isset($a['cake']['a']['b']));
echo '===========================', '<br/>';
// PHP 5.4 changes how isset() behaves when passed string offsets. 
$expected_array_got_string = 'somestring';
var_dump(isset($expected_array_got_string['some_key']));//f
var_dump(isset($expected_array_got_string[0]));//t
var_dump(isset($expected_array_got_string['0']));//t
var_dump(isset($expected_array_got_string[0.5]));//t
var_dump(isset($expected_array_got_string['0.5']));//f
var_dump(isset($expected_array_got_string['0 Mostel']));//f
?>  
empty
    $var = 0;
    var_dump(empty($var));
    var_dump(isset($var));

扩展知识 转换为布尔值

#php日期时间

第二种配置文件方式设置时区

<?php
//1.通过代码设置时区 推荐
date_default_timezone_set('PRC');
//2.通过配置文件设置时区
// date.timezone = PRC
//time 获取到的是 秒数为单位的时间戳
echo time();    

//格式化一个时间戳
//第一个参数是一个时间格式
//第二个参数是一个时间戳
    
//默认的时间戳获取的就是格林xx时间
echo date('Y-m-d H:s', time());

$str = '2017-10-22 15:18:58';

//对已有格式时间做格式化
//strtotime 可以用来将一个有格式的时间字符串,转换为一个时间戳
$timestamp = strtotime($str);
//<b\r>这个要看页面源码才能推出来<br>
//推出来了 '' 和 ""的区别
//'' 一个是给字符串用的
//“” 一个是给页面换行用的
echo date('Y年m月d日<b\r>H:i:s',$timestamp);
echo date("Y年m月d日<b\r>H:i:s",$timestamp);
?>

php常量 define()

<?php
    //php 中可以通过 define函数定义 一个常量
    //常量的特点:定义后不能被修改,也是临时存放数据的容器
    //什么时候用常量:一般程序的配置信息(不会在运行过程中修改) 都会在常量中定义

    //变量或函数都是采用 snake_case (小写字母加下划线)命名规则
    //常量是SYSTEM_NAME 命名规则

    //第一个参数是常量名称
    //第二个是常量的值
    //第三个参数是常量名称是否忽略大小写
    define('SYSTEM_NAME','阿里百秀');
    echo SYSTEM_NAME;
    // 第三个参数是常量名称是否忽略大小写 默认为false 不忽略
    define('SYSTEM_VERSION', '1.0', true);
    echo SYSTEM_VERSION;
    // echo system_version;
?>

php require()引入

demo.PHP代码
<?php

    //#require 可以用于在当前脚本中载入一个别的脚本文件并且执行他
    //require 在每一次调用的时都会载入对应文件
    //报错代码:
    // require 'config.php';
    // echo SYSTEM_NAME;
    // require 'config.php';
    // echo SYSTEM_NAME;

    // require_once==============================
    // require_once 如果之前载入过,不再执行(只执行一次)
    // 由于类似于 定义常量 定义函数 这种操作不能执行多次
    // 所以 require_once 更加合适载入这种文件
    require_once 'config.php';
    echo SYSTEM_NAME;
    require_once 'config.php';
    echo SYSTEM_NAME;
?>
config.php代码
<?php

/**
 * 定义公共的配置信息
 * 1. 便于维护
 * 2. 公共使用
 */

define('SYSTEM_NAME', 'HELLO');
define('SYSTEM_VERSION', '1.0.0');
define('DB_HOST', '192.168.110.120');

#php include() 加载文件

08-include.php
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <!-- require 特点: 一旦被载入的文件不存在就会报一个致命错误,当前文件不再往下执行 -->
  <!-- include 特点: 载入文件不存在不会报错误(会有警告,警告不用管),当前文件继续执行 -->
  <?php include 'aside.php'; ?>
  <main>
    这是主要的区域
  </main>
</body>
</html>
09-include2.PHP
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <?php require 'aside.php' ?>
    <main>
        另外一个页面
    </main>
</body>
</html>
aside.php
<aside>
  这是侧边栏1111
</aside>

老师对 载入文件的总结

#表单的概念

logo.php
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Page Title</title>
</head>

<body>
    <form action="foo.php" method="post">
        <table border="1">
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username" /></td>
            <tr>
            <tr>
                <td>密码</td>
                <td><input type="text" name="password" /></td>
            <tr>
            <tr>
                <td></td>
                <!-- <td><input type="submit" value="登陆" /></td> -->
                <!-- BUTTON 默认也是 submit -->
                <td><button>登录</button></td>
            </tr>
        </table>
    </form>
</body>

</html>
foo.php
<?php 
var_dump($_GET);
// $_GET 用于接收 URL 地址中的提交数据(一般是 GET 参数)

var_dump($_POST);
// $_POST 用于接收 请求体 中提交的数据(一般是 POST 提交的数据)

var_dump($_REQUEST);
// $_REQUEST = $_GET + $_POST
?>

效果:


作业 学习函数

手册案例1
    $makefoo = true;

    /* 不能在此处调用foo()函数,
   因为它还不存在,但可以调用bar()函数。*/
    bar();
    if($makefoo){
        function foo(){
            echo 'wwww';
        }
    }
    /* 现在可以安全调用函数 foo()了,
    因为 $makefoo 值为真 */

    if($makefoo) foo();

    function bar(){
        echo 'abc';
    }

####### 手册案例2

    function foo()
    {
        function bar()
        {
            echo 'abc';
        }
    }
        /* 现在还不能调用bar()函数,因为它还不存在 */
    foo();

        /* 现在可以调用bar()函数了,因为foo()函数
        的执行使得bar()函数变为已定义的函数 */

    bar();
手册案例3(递归函数)
function recursion($a)
{
    if ($a < 20) {
        echo "$a\n";
        recursion($a + 1);
    }
}

recursion(0)
手册案例 函数的参数
    function makecoffee($type ='嘿嘿'){
        return "abcd$type.\n";
    }
    echo makecoffee();//abcd嘿嘿.
    echo makecoffee(null);//abcd.
    echo makecoffee('espresso');//abcdespresso.
手册的案例 函数的参数2

is_null()-判断是不是null

参考地址:https://www.w3cschool.cn/php/php-is_null.html

join()-数组元素组合为一个字符串

参考地址:http://www.w3school.com.cn/php/func_string_join.asp
function makecoffee($type = array('a'), $coffeeMaker = null)
{
    $device = is_null($coffeeMaker) ? "hands" : $coffeeMaker;
    return "Making a cup of" . join(',', $type) . "width $device.\n";
}
echo makecoffee();//Making a cup ofawidth hands.

echo makecoffee(array('cappuccino','lavazza'),'teapot')//Making a cup ofcappuccino,lavazzawidth teapot.

作业 学习变量

手册 案例1 &$引用
    $foo = 'Bob';
    $bar = &$foo;
    $bar = "My name is $bar"; //修改 $bar变量
    echo $bar;//My name is Bob
    echo $foo;//My name is Bob
手册 案例2
<?php
    $foo = 25;
    $bar = &$foo; //合法的赋值
    $bar = &(24 * 7);// 非法; 引用没有名字的表达式
    function test(){
        return 25;
    }

    $bar = $test();//非法
?>
变量范围
手册 案例1
$a = 1;
function test()
{
    echo $a;//报错未定义
}
test()
手册 案例2 要使用 global访问全局变量
$a = 1;
$b = 2;
// PHP 中全局变量在函数中使用时必须声明为 global。 
function Sum()
{
    global $a, $b;
    $b = $a + $b;
}

Sum();
echo $b;//3
手册案例3
$GLOBALS 是一个关联数组,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。以下范例显示了超全局变量的用处:

<?php
$a = 1;
$b = 2;
function Sum()
{
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

Sum();
echo $b;//3
?>

拓展 数据类型转换方式

参考地址:https://blog.csdn.net/sqlquan/article/details/81330767


<?php 
    // 第一种转换方式: (int)  (bool)  (float)  (string)  (array) (object)
    $num1 = 3.14;
    $num2 = (int)$num1;
    var_dump($num1);//float(3.14)
    var_dump($num2);//int(3)
    // 第二种转换方式:  intval()  floatval()  strval()
    $str = '123.9abc';
    $int = intval($str);
    $float = floatval($str);
    $str = strval($float);
    var_dump($int);//int(123)
    var_dump($float);//float(123.9)
    var_dump($str);//string(5) "123.9"

    // 第三种转换方式:  settype();

    $num4 = 12.8;
    $flg = settype($num4,'int');
    var_dump($flg);//bool(true) 
    var_dump($num4);//int(12)

?>

重要 数据类型

常见的 PHP 数据类型与 JavaScript 基本一致:
string(字符串)
<?php
$foo; // 申明一个变量,变量名为 `foo`,未对其进行赋值
$bar = 'baz'; // 申明一个变量,将一个值为 `baz` 的字符串赋值给它
echo $foo; // 输出一个变量名为 `foo` 的变量
fn($bar); // 将一个变量名为 `foo` 的变量作为 `fn` 的实参传递

integer(整型)—— 只能存整数
float(浮点型)—— 可以存带小数位的数字
boolean(布尔型)
array(数组)
object(对象)
NULL(空)
Resource(资源类型)
Callback / Callable(回调或者叫可调用类型)
字符串
PHP 有多种创建字符串的方式:单引号、双引号等。
单引号字符串
不支持特殊的转义符号,例如 \n
如果要表示一个单引号字符内容,可以通过 \' 表达
如果要表示一个反斜线字符内容,可以通过 \\ 表达
双引号字符串
支持转义符号
支持变量解析

转载于:https://my.oschina.net/u/4007307/blog/2254719

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值