php_study progress(1)

本文介绍了PHP语言的基本概念,包括语法特点、函数使用、变量定义及作用域等,适合初学者快速掌握PHP编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

php_study progress(1)

PHP是一种语法简单、功能强大的网络编程语言。在语法格式上,PHP借鉴了广泛流行的C、Java和Perl等编程语言的特点,非常类似于C语言,但比C语言更简单,易学和易用,因此特别适合于学习过C语言,有志于网络编程的人学习和使用。

在功能上,它提供了丰富的函数库,支持复杂字符串处理,正规表达式和图形处理,可根据用户请求将服务器的数据轻松地产生动态网页,支持目前几乎所有流行的数据库系统,如Oracle、SQL Server、MySQL、mSQL、Informix、SyBase、ODBC、PostgreSQL以及dBase等。在在可移植性上,PHP程序可在Windows下快速开发,代码甚至不加修改即可运行在Unix、Linux上。

 

 1 PHP 的脚本块以<?php 开始,以 ?> 结束。当然,在支持简写的服务器上,也可以使用简约风格 <? 和?> 来开始和结束脚本块;还可以使用脚本风格的形式,如下代码:
 2 
 3     <script language="php"> 
 4     //PHP 语句
 5     </script>
 6 
 7 我们在这里推荐使用标准风格。
 8 
 9     <?php
10     //PHP 语句
11     ?>
12 
13 PHP 提供两种输出文本的基础指令:echo 和 print。print 和 echo 基本一致。 但是print 不支持逗号分隔多个显示变量的语法。注意:PHP 中的每个代码行都必须以分号结束。
14 
15     <?php
16     echo "Hello World";
17     print "study";
18     ?>
19 
20 如果你要输出中文,出于国际化的考虑,应当使用header()函数正确设置响应头:
21 
22     <?php
23     header("Content-Type:text/html;charset=utf-8");
24     echo "国家统计局解读CPI数据:3月蔬菜、猪肉涨幅较高";
25     ?>
26 
27 在 PHP 中,我们使用 // 来编写单行注释,或者使用 /* 和 */ 来编写大的注释块。
28 
29     <?php
30     //This is a comment
31      
32     /*
33     This is
34     a comment
35     block
36     */
37     echo "this is the only output";
38     ?>
常量名功能
__FILE__默认常量,PHP程序文件名
__LINE__默认常量,PHP程序行数
PHP_VERSIONPHP程序版本
PHP_OS执行PHP解析器的操作系统名称
TRUE真值
FALSE假值
NULLnull值
E_ERROR指到最近的错误处
E_WARNING指到最近的警告处
E_PARSE指解析语法有潜在问题处
E_NOTICR为发生不寻常但不一定是错误处
<?php
header("Content-Type:text/html;charset=utf-8");
echo "当前文件路径:".__FILE__;
echo "<br>当前行数:".__LINE__;
echo "<br>当前PHP版本信息:".PHP_VERSION;
echo "<br>当前操作系统:".PHP_OS;
?>

 

output:
当前文件路径:/course/test.php
当前行数:4
当前PHP版本信息:5.4.41-0+deb7u1
当前操作系统:Linux

 

1     <?php
2     //对大小写敏感
3     define("GREETING", "Welcome to Hubwiz.com!");
4     echo GREETING;
5     //对大小写不敏感
6     define("HUB", "Welcome to Hubwiz.com!", true);
7     echo hub;
8     //define("2FOO","Hubwiz");这样定义是不合法的
9     ?>

 

变量是指在程序执行过程中其值可以变化的量。变量通过一个名字(变量名)来标识。系统为程序中的每一个变量分配一个存储单元,变量实质上就是计算机内存单元的命名。因此借助变量名就可以访问内存中的数据。

变量的名称可以很短(比如 x 和 y),也可以取更具描述性的名称(比如 carname、total_volume)。

PHP 变量规则:
1.变量以 $ 符号开头,其后是变量的名称;
2.变量名称必须以字母或下划线开头;
3.变量名称不能以数字开头;
4.变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _);
5.变量名称对大小写敏感($y 与 $Y 是两个不同的变量)。
1     <?php
2     $txt="Hello world!";
3     $x=5;
4     $y=10.5;
5     ?>
变量的作用域

  变量在使用时,要符合变量的定义规则。变量必须在有效范围内使用,如果超出有效范围,变量也就失去意义了。

  局部变量:即在函数内部定义的变量,其作用域是所在函数。

  全局变量:即被定义在所有函数以外的变量,其作用域是整个PHP文件,但是在用户自定义函数内部是不可用的。想在用户自定义函数内部使用全局变量,要使用global关键字声明。

    <?php
    header("Content-Type:text/html;charset=utf-8");
    $zy="你好";
    $zyy="PHP语言";
    function lxt(){
        echo $zy."<br>";  //$zy 不能被调用,没有输出
        global $zyy;       //利用关键字global 在函数内部说明,不说明认为是私有变量
        echo $zyy."<br>";  //调用$zyy
    }
    lxt();
    ?>
静态变量:能够在函数调用结束后仍保留变量值,当再次回到其作用域时,又可以继续使用原来的值。而一般变量是在函数调用结束后,其存储的数据值将被清除,所占的内存空间被释放。使用静态变量时,先要用static来声明变量。需要把关键字static 放在要定义的变量之前。

    <?php
    function zdy(){
        static $count=0;
        $count++;
        echo $count." ";
    }
    function zdy1(){
        $count=0;
        $count++;
        echo $count." ";
    }
    for($i=0;$i<10;$i++) zdy();  //输出1~10
    echo "<br>";
    for($i=0;$i<10;$i++) zdy1(); //输出10个1
    ?>

  自定义函数zdy()是输出从1到10,10个数字,而zdy1()函数则输出的是10个1。因为自定义函数zdy()含有静态变量,而函数zdy1()是一个普通变量。初始化都为0,再分别使用for循环调用两个函数,结果是静态变量的函数zdy()在被调用后,保留了$count中的值,静态变量的初始化只是在第一次遇到时被执行,以后就不再对其进行初始化操作了,将略过第3行代码不执行;而普通变量的函数zdy1()在被调用后,其变量$count失去了原来的值,重新被初始化为0。
可变变量

  可变变量是一种独特的变量,它允许动态改变一个变量名称。工作原理是该变量的名称由另外一个变量的值来确定。实现过程是在变量的前面再多加一个"$"。

    <?php
    $my_name="myname";
    $myname="yourname";
    echo $my_name; // 输出myname
    echo "<br>";
    echo $$my_name; //通过$$my_name改变变量$my_name的名称为$myname,输出yourname
    ?>

运行结果为:myname yourname
PHP 支持8种基本的数据类型:

四种标量类型:boolean(布尔型)、integer(整型)、float (浮点型, 也称作 double)、string (字符串);
两种复合类型:array (数组)、object(对象);
最后是两种特殊类型:resource(资源)、NULL(NULL)。
整数

整数是没有小数的数字。

整数规则:
整数必须有至少一个数字(0-9); 整数不能包含逗号或空格; 整数不能有小数点; 整数正负均可;

  可以用三种格式规定整数:十进制、十六进制(前缀是 0x)或八进制(前缀是 0)。在下面的例子中,我们将测试不同的数字。PHP 用var_dump() 函数会返回变量的数据类型和值。

    <?php 
    $x = 5985;
    var_dump($x);
    echo "<br>";   //起到回车的作用
    $x = -345; // 负数
    var_dump($x);
    echo "<br>"; 
    $x = 0x8C; // 十六进制数
    var_dump($x);
    echo "<br>";
    $x = 047; // 八进制数
    var_dump($x);
    ?>

运行结果为:

    int(5985)
    int(-345)
    int(140)
    int(39) 
浮点数

浮点数是有小数点或指数形式的数字。

    <?php 
    $x = 10.365;
    var_dump($x);
    echo "<br>"; 
    $x = 2.4e3;
    var_dump($x);
    echo "<br>"; 
    $x = 8E-5;
    var_dump($x);
    ?>

运行结果为:

    float(10.365)
    float(2400)
    float(8.0E-5) 
布尔型

布尔型是最简单的变量,布尔变量:true和false值。

    <?php
    $True=True;                
    echo $True;
    echo "<BR>"; 
    $False=False;
    echo $False;
    ?>

运行结果为:

    1

true和false实际上是代表数值1和0,因此true在输出时显示为1,但是在给变量赋值的时候,如果赋值为1,则被当成整型,如果被赋值为true,则被当成布尔型。

当转换为布尔型时,以下值被认为是false:
(1)布尔值false;
(2)整型值0(零);
(3)浮点型值0.0(零);
(4)空白字符串和字符串"0";
(5)没有成员变量的数组;
(6)没有单元的对象(仅适用php4);
(7)特殊类型NULL;

而所有其他值都被认为是TRUE包括任何资源。
字符串

PHP中有三种方式定义字符串:

单引号方式

可以使用一对单引号来声明一个字符串,如果需要在字符串中包含单引号,可以使用 转义符\:

    <?php
    header("Content-Type:text/html;charset=utf-8;");
    $single_str='我被单引号括起来了!<br>';
    echo $single_str;
    $single_str='输出双引号:"我在双引号里面"<br>';
    print $single_str;
    $single_str='输出美元符号:$<br>';
    print $single_str;
    $single_str='输出单引号: \'嘿嘿,我在单引号里面\'<br>';
    echo $single_str;
    ?>

双引号方式

也可以使用一对双引号来声明一个字符串。类似的,如果要在其中包含双引号, 使用转义符\:

    <?php
    header("Content-Type:text/html;charset=utf-8;");
    $Double_str="我被双引号括起来了!<br>";
    echo $Double_str;
    $Double_str="可以直接包含'单引号'<br>";
    echo $Double_str;
    $Double_str="使用转义符包含\"双引号\"<br>";
    echo $Double_str;
    ?>

HereDoc方式

通常在PHP代码中,你会需要将变量和预定的模板拼接起来,构成返回前端的HTML字符串。 Perl风格的HereDoc方式最适合这种应用场景。

下面的示例定义了一个HereDoc风格的字符串:

    <?php
    $form_str = <<<EOF
    <form>
    <input type="text" placeholder="account">
    <input type="password" placeholder="password">
    <input type="submit" value="Login">
    </form>
    EOF;
    echo $form_str;
    ?>

不用拼接字符串,不用考虑转义,就像写HTML一样 —— 这相当地爽。你需要做的,仅仅是在 真正的内容前后,分别加上开始标识符和结束标识符。

    开始标识符总是以<<<开始,然后加上一个自定义的TOKEN,比如,我们使用EOT, 你也可以使用SCREWYOU, HAHAHA... 总之只要不在内容中出现就行。

    结束标识符必须独占一行,顶格写上之前我们自定义的TOKEN,并且总是以;结尾。

HereDoc方式支持在内容中使用变量,嗯,自带模板插值功能:

    <?php
    $user="whoami";
    $form_str = <<<HAHA
    <form>
    <input type="text" placeholder="account" value="$user">
    <input type="password" placeholder="password">
    <input type="submit" value="Login">
    </form>
    HAHA;
    echo $form_str;
    ?>

 

posted @ 2018-03-22 13:35 Edge_of_Eternity 阅读(...) 评论(...) 编辑 收藏

一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
解释下面修改sql的含义 UPDATE i_tigermed_po_study_unitbase_progress SET cumulative_unit_count = ( SELECT COALESCE(SUM(COALESCE(actual_cnt, forecast_cnt)), 0) FROM ( SELECT t2.data_month, MAX(CASE WHEN t2.data_type = 'actual' AND (i_tigermed_po_study_unitbase_progress.data_type = 'forecast' OR t2.data_month <![CDATA[<=]]> i_tigermed_po_study_unitbase_progress.data_month) THEN t2.period_unit_count END) AS actual_cnt, MAX(CASE WHEN t2.data_type = 'forecast' THEN t2.period_unit_count END) AS forecast_cnt FROM i_tigermed_po_study_unitbase_progress t2 INNER JOIN ( SELECT t31.data_month, t31.data_type, MAX(t31.view_month) AS max_view_month FROM i_tigermed_po_study_unitbase_progress t31 WHERE t31.study_unitbase_id = i_tigermed_po_study_unitbase_progress.study_unitbase_id AND t31.unitbase_task_id = i_tigermed_po_study_unitbase_progress.unitbase_task_id AND t31.view_month <![CDATA[<=]]> i_tigermed_po_study_unitbase_progress.view_month AND t31.is_deleted = '0' GROUP BY t31.data_month, t31.data_type ) t3 ON t2.data_month = t3.data_month AND t2.data_type = t3.data_type AND t2.view_month = t3.max_view_month WHERE t2.study_unitbase_id = i_tigermed_po_study_unitbase_progress.study_unitbase_id AND t2.unitbase_task_id = i_tigermed_po_study_unitbase_progress.unitbase_task_id AND (t2.data_type = i_tigermed_po_study_unitbase_progress.data_type OR i_tigermed_po_study_unitbase_progress.data_type = 'forecast') AND t2.data_month <![CDATA[<=]]> i_tigermed_po_study_unitbase_progress.data_month AND t2.is_deleted = '0' GROUP BY t2.data_month ) tt ) WHERE study_unitbase_id = #{studyUnitbaseId}::INT8 AND view_month = #{viewMonth}::VARC
03-29
<think>好的,我需要解释用户提供的UPDATE SQL语句的作用及其子查询逻辑,包括COALESCE函数、SUM聚合和嵌套SELECT的用途。首先,我应该回忆相关的SQL知识,尤其是UPDATE语句、子查询、聚合函数和COALESCE函数的作用。 用户的问题提到了COALESCE函数,我记得这个函数用于处理NULL值,返回参数中的第一个非NULL值。SUM聚合函数则用于计算某列的总和。子查询通常用于从其他表中获取数据,作为主查询的条件或值。 接下来,我需要查看用户提供的引用内容。引用[1]提到子查询是嵌套在另一个查询内部的查询,结果作为外层查询的过滤条件。引用[3]中的示例展示了带有子查询和聚合函数的复杂查询,可能对解释有帮助。 假设用户给出的UPDATE语句类似于这样的结构: UPDATE table1 SET column1 = COALESCE( (SELECT SUM(column2) FROM table2 WHERE table2.id = table1.id), 0 ) WHERE condition; 我需要分解每个部分的作用。UPDATE语句用于更新表中的数据。SET子句中的column1被赋予一个值,这个值由COALESCE函数处理。子查询部分计算了table2中column2的总和,且通过WHERE条件关联了table1和table2的id。如果子查询返回NULL(即没有匹配的记录),COALESCE会将其替换为0。 SUM聚合在这里汇总了table2中与table1相关联的所有记录的column2值。嵌套SELECT的作用是从另一个表中获取汇总数据,确保每个table1的记录都更新为对应的总和。COALESCE确保即使没有匹配记录,column1也会有一个默认值0,避免NULL。 可能需要注意的点包括子查询是否返回多行(应该确保子查询返回单个值,否则会报错),以及WHERE条件是否正确关联两个表。此外,使用COALESCE处理NULL值是常见的做法,保证数据的一致性。 用户可能还想知道这种结构的应用场景,比如更新订单总金额、库存数量等需要汇总其他表数据的场景。同时,性能方面,如果子查询涉及大量数据,可能需要优化索引或查询结构。 总结起来,我需要将这些分析整理成用户容易理解的步骤,并生成相关问题,帮助用户深入理解。</think>### UPDATE SQL语句的功能与子查询逻辑解析 #### 1. **UPDATE语句核心作用** 该语句用于更新表中**特定列的值**,通常结合子查询和聚合函数实现**跨表数据同步或计算**。例如:更新订单总金额、统计用户累计消费等[^1]。 #### 2. **COALESCE函数作用** - **处理空值**:若子查询结果为`NULL`,`COALESCE`将其替换为默认值(如示例中的`0`),避免空值破坏业务逻辑。 - 示例:`COALESCE((SELECT SUM(amount)),0)`表示“无记录时金额记为0”[^3]。 #### 3. **SUM聚合函数用途** - **数据汇总**:对关联表中符合条件的记录进行数值求和,常用于统计金额、数量等指标。 - 示例:`SUM(invoice_total)`计算某客户所有发票的总金额[^3]。 #### 4. **嵌套SELECT子查询逻辑** - **关联数据获取**:通过`WHERE tableA.id = tableB.id`建立表间关联,确保仅获取与主表记录匹配的子集。 - **单值返回**:子查询必须返回**单个值**(如聚合结果),否则会触发SQL错误。 --- ### 示例语句拆解 假设原始SQL为: ```sql UPDATE clients SET total_spent = COALESCE( (SELECT SUM(invoice_total) FROM invoices WHERE invoices.client_id = clients.client_id), 0 ); ``` 1. **执行顺序** - 先执行子查询:对每个`client_id`计算其发票总额`SUM(invoice_total)` - 再通过`COALESCE`将无发票记录的客户总消费设为`0` - 最后将结果更新到`clients.total_spent`列 2. **关联关系** `WHERE invoices.client_id = clients.client_id` 是关键,它通过**主外键关联**确保每个客户只计算自己的发票数据。 --- ### 应用场景 - **数据仓库**:定期更新维度表的统计指标(如用户总订单数) - **财务系统**:实时计算账户余额、应收账款 - **报表生成**:预计算聚合数据提升查询性能 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值