PHP基础点滴
PHP基础点滴
双冒号::的用法:
双冒号操作符即作用域限定操作符Scope Resolution Operator可以访问静态、const和类中重写的属性与方法。
伪类型(pseudo-types) 是 PHP 文档里用于指示参数可以使用的类型和值。 请注意,它们不是 PHP 语言里原生类型。 所以不能把伪类型用于自定义函数里的类型约束(typehint)。
mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
number 说明一个参数可以是 integer 或者 float。
$GLOBALS内置全局变量的含义:它不同于超全局变量(如 $_SERVER等),仅仅只是针对当前页面而言。在当前页面下,所定义的变量如果为全局作用域,则会自动加入到$GLOBALS之中,形成关联数组,名称为变量名,值为变量的值。
超全局变量:无论在哪个页面,哪个作用域内都可以直接使用。
获取PHP版本信息
1)超全局变量PHP_VERSION 表示当前PHP版本,其实该变量的值不可人为修改,只可系统操作,可以把它当做是系统的一个内置常量。
2)phpversion()方法返回一个string变量
版本比较:version_compare(PHP_VERSION, '5.3.0', '>=');
version_compare()方法返回一个minxed类型的变量,实际上该结果不能直接打印输出,只能用作判断条件。
echo __DIR__; //打印出当前php脚本所在的文件物理路径(全),并非项目的绝对或相对路径。
die()语句:执行到这里,服务器会中断后续的语句执行,如果为die('some string');则会同时输出string内容到页面,作为提示信息。
mixed constant ( string $name ) : Return the value of the constant indicated by name. 举个例子:
<?php
namespace my\name;
const MYCONST = 1;
$d = namespace\MYCONST;
echo $d,'<br>'; //输出 1
$d = __NAMESPACE__ . '\MYCONST';
echo $d,'<br>'; //输出 my\name\MYCONST
echo constant($d),'<br>'; //输出 1
?>
PHP的namespace看似与Java的package很相似,但实际上二者差别非常大。Java的package的作用是编译的时候对字节码的存储通过创建文件夹(包括子文件夹)的方式进行分类保存,在运行的时候则会自然而然的在这些文件夹之中去搜索并调用对应的class文件。这样做最大的好处是,让程序员可以忽略细节以及最终的引入结果中的层次关系。但是,PHP无法做到这点,它所涉及的namespace仅仅只是针对单个文件内部而言的,即便是通过include引入外部的文件,但最终还是会让程序员自己来思考融合之后的当前文件内的多个namespace之间的关系,并且不得不去面对一个事实——那就是namespace之间的冲突和引用之间的“混乱”,这种局面极易造成使用上的失误。
常量__NAMESPACE__的值是包含当前命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它包含一个空的字符串。
关键字namespace默认为当前namespace。
此外,与namespace紧密相关还有use操作符,它用于导入(import) 或者使用别名(aliase) 。如:
<?php
use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化 My\Full\Classname 对象
NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func
?>
PHP在使用new操作符实例化的时候,如果没有传入构造函数参数,那么可以省略构造函数名后的();
PHP的权限只有三种:public,private,protected。而Java却还有default。PHP中的缺省权限就是public。
PHP中通过const定义的常量,一旦定义值不能更改。而且定义const常量名称不能以$开头,因为对于PHP而言,$就是变量的代名词。
<?php
//const $a = 5; //Parse error: syntax error, unexpected '$a'
const a = 5;
echo a; //输出 5
//a = 3; //Parse error: syntax error, unexpected '=' in line 5
?>
define定义常量:bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
同样,常量的名称最好不要使用$开头,虽然不会报错,但是后续运行很可能会出现异常结果(不会提示异常)。一旦定义,便不能修改其值。值得一提的是,如果第三个参数为true便会忽略大小写,默认为false。此外,从PHP7开始,支持值为数组类型。以下是例子:
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // 输出 "Hello world."
echo Constant; // 输出 "Constant" 并导致 Notice define("GREETING", "Hello you.", true);
echo GREETING; // 输出 "Hello you."
echo Greeting; // 输出 "Hello you." // PHP 7 起就可以运行了
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo ANIMALS[1]; // 输出 "cat"
?>
array_change_key_case() 将 array 数组中的所有键名改为全小写或大写。本函数不改变数字索引。
array array_change_key_case ( array $array [, int $case = CASE_LOWER | CASE_UPPER ] )
strpos — 查找字符串首次出现的位置。API格式:mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
<?php $mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme); // 注意这里使用的是 ===。简单的 == 不能像我们期待的那样工作,
// 因为 'a' 是第 0 位置上的(第一个)字符。
if (!$pos) {
echo "The string '$findme' was not found in the string '$mystring'",'<br>';
} else {
echo "The string '$findme' was found in the string '$mystring'";
echo " and exists at position $pos";
} if ($pos == false) {
echo "The string '$findme' was not found in the string '$mystring'",'<br>';
} else {
echo "The string '$findme' was found in the string '$mystring'";
echo " and exists at position $pos";
} if ($pos === false) {
echo "The string '$findme' was not found in the string '$mystring'";
} else {
echo "The string '$findme' was found in the string '$mystring'";
echo " and exists at position $pos";
} ?>
输出结果:
The string 'a' was not found in the string 'abc'
The string 'a' was not found in the string 'abc'
The string 'a' was found in the string 'abc' and exists at position 0
在php中定义的作用域有self和parent,在php6中提供了static作用域
self:表示当前类的作用域,与this不通的是,它不表示类的某个特定实例,在类之外的代码中不能使用self,而且它不能识别自己在继承中层次的位置。也就是说,当在扩展类中使用self时,它调用的不是父类的方法,而是扩展类的重载的方法。
parent:表示当前类父类的作用域,其余的跟self特性一样。
"::"的操作符,这个是作用域限定操作符,是用一个双冒号"::"表示,它用来置顶类中不同作用域的级别。左边是作用域,右边是访问作用域的成员。
双冒号操作符即作用域限定操作符Scope Resolution Operator可以访问静态、const和类中重写的属性与方法。
在类定义外使用的话,使用类名调用。在PHP 5.3.0,可以使用变量代替类名。
public 表示全局,类内部外部子类都可以访问;
private表示私有的,只有本类内部可以使用;
protected表示受保护的,只有本类或子类或父类中可以访问;
use与namespace的区别:
namespace Think\Model;
use Think\Model;
use中的Model指的是class,namespace中的Model指的是path的一部分,是路径,或者说是文件夹,而不是具体的class文件。
数组
$arr = array();
$arr[] = $value;
效果等价于:
$arr = array();
array_push($arr, $value);
但是从性能来看,array_push在每次推入大量数据时会比较好,而$arr[]赋值则相反。
ob_start()函数用于打开缓冲区,比如header()函数之前如果就有输出,包括回车/空格/换行/都会有"Header had all ready send by"的错误,这时可以先用ob_start()打开缓冲区PHP代码的数据块和echo()输出都会进入缓冲区而不会立刻输出.当然打开缓冲区的作用很多,只要发挥你的想象。ob_end_flush()输出全部内容到浏览器。ob_get_clean 的意思是先得到 ob_get_contents 的内容,然后再删除缓冲区的内容 (ob_end_clean)。
“Without output buffering, PHP sends data to your web server as soon as it is ready - this might be line by line or code block by code block. Not only is this slow because of the need to send lots of little bits of data, but it also means you are restricted in the order you can send data. Output buffering cures these ills by enabling you to store up your output and send to send it when you are ready to - or to not send it at all, if you so decide.”
为了提高性能,通过buffer整体输出来替代分步输出。
{}大括号可用作变量边界
// Calls the method specified by the action
$output = $this->{$this->actions[$action]}();
require()通常来导入静态的内容,而include()则适合用导入动态的程序代码。
http://www.cnblogs.com/wangzehuaw/p/6144764.html
http://www.jb51.net/article/22467.htm
PHP基础点滴的更多相关文章
- Netty基础点滴
编写一个应答服务器 编写一个应答服务器 写一个Netty服务器主要由两部分组成: 配置服务器功能,如线程.端口 实现服务器处理程序,它包含业务逻辑,决定当有一个请求连接或接收数据时该做什么 启动服务器 ...
- JSP基础点滴
注释:<%-- 注释 --%> JSP中一共有3种Scriptlet代码.支持与HTML的代码混编. 第一种:<%%> 定义局部变量,编写语句. 第二种:<%!%> ...
- Java基础点滴
1. 关于interface的定义 [修饰符] interface 接口名 [extends 父接口名列表]{ [public] [static] [final] 常量;[public] [abstr ...
- PHP学习系列(1)——字符串处理函数(1)
从09年开始使用JAVA到现在差不多5年多了,然后由于即将要去的公司(研究僧终于要毕业了!)是使用PHP,Python作为后台开发语言的,所以要开始一段双P的学习旅程.用过PHP的都说这是很简单的一门 ...
- SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识
原文:SQL点滴17-使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息 ...
- 生活点滴:java基础知识细化
生活点滴:java基础知识细化 一.前言 越是对一门语言深入了解,就会发现自己不知道的东西越多,这才是走向了正道,同样的,对于java语言特性的学习,笔者也只是初窥门径. 二.java基础知识思考 i ...
- JAVA基础库的使用点滴
Idea中双击SHIFT可以搜索[Eclipse中也有],这个很重要,可以找到当前的项目中可以引擎的已有的类,不要再次自己发明轮子 各种Util先在基础库和开源库中找 Base64编码 guava:c ...
- php基础的第一天 任务点滴,event对象方法概括 ing....
day1 任务 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- 被linux线程基础折磨的点滴——还是没得到完美的答案,但至少得到了所需
#include<sys/types.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h> ...
随机推荐
- logback的使用和logback.xml详解
一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: logback-core:其它两 ...
- 如何开发由Create-React-App 引导的应用(四)
此文章是翻译How to develop apps bootstrapped with Create React App 官方文档 系列文章 如何开发由Create-React-App 引导的应用 如 ...
- c#中RGB与int类型之间的转换
Color color = Color.FromArgb(0, 0, 255);int colorInt = ParseRGB(color); --------------------- int Pa ...
- iptables nat及端口映射
iptables nat及端口映射 发布: 2010-6-11 15:05 | 作者: admin | 来源: SF NetWork 门户网站 iptables 应用初探(nat+三层访问控制) ip ...
- linux_inotify
什么是inotify? 拥有强大.粒细粒度.异步文件系统事件监控机制,监控文件系统中添加.删除.修改.移动等各种事件 版本支持: 内核 2.6.13以上版本,inotify-tools 是实施监控的软 ...
- Node.js之单利模式
在iOS中我们经常用到单利模式,这样就能够实现在多处共享同一数据,那么在Node.js中也存在这种模式. 我们知道,Node.js中模块的概念很重要,在写模块的接口的时候,只需要暴露出一个实例对象就能 ...
- sp_getAppLock使用
sp_getAppLock 获取程序资源锁,简单的说就是调用此函数可以达到我们程序中.NET的lock锁的作用. 作用域是当前数据库下 四个参数: @resource(必填):资源名称,类型nvar ...
- Linux服务器删除乱码文件和文件夹的方法
Linux服务器删除乱码文件和文件夹的方法 首页进入乱码文件所在文件夹由于php大势所趋,所以接触Linux服务器的机会越来越多.不同于Windows服务器,Linux服务器只支持数字.英文等字符,对 ...
- 【转】利用matlab生成随机数函数
原文地址:利用matlab生成随机数函数 rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数) betarnd:贝塔分布的随机数生成 ...
- ng机器学习视频笔记(一)——线性回归、代价函数、梯度下降基础
ng机器学习视频笔记(一) --线性回归.代价函数.梯度下降基础 (转载请附上本文链接--linhxx) 一.线性回归 线性回归是监督学习中的重要算法,其主要目的在于用一个函数表示一组数据,其中横轴是 ...