1. require和require_once的区别

require_once()包涵是绝对路径

include() 和require() :语句包括并运行指定文件。 include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用 require()。include() 就不是这样,脚本会继续运行。 require_once() 语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。 include_once() 语句在脚本执行期间包括并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。如同此语句名字暗示的那样,只会包括一次。

2. dirname(_FILE_)用法

__FILE__的路径是当前代码所在文件;

basename(__FILE__)表示当前文件的文件名称

dirname(__FILE__): 得到的是文件所在层目录名,从根目录开始,也可能返回一个 . (当前目录)

dirname(dirname(__FILE__)): 得到的是文件上一层目录名

包含得到上一级目录的文件 include(dirname(__FILE__).'/../filename.php');

eg:

<?php  
require_once dirname(__FILE__) . '/Hive.php'; 
echo __FILE__ ; // 取得当前文件的绝对地址,结果:D:\www\test.php
echo dirname(__FILE__); // 取得当前文件所在的绝对目录,结果:D:\www\
echo dirname(dirname(__FILE__)); //取得当前文件的上一层目录名,结果:D:\
?> http://blog.csdn.net/lianxiang_biancheng/article/details/8864846
http://taoistwar.iteye.com/blog/1562859
http://stackoverflow.com/questions/15345618/php-thrift-0-9-0-class-thrift-transport-ttransport-not-found-in-tsocket-ph
    <?php
$GLOBALS['THRIFT_ROOT'] = '/server/www/third_part/thrift-0.5.0'; require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';
require_once $GLOBALS['THRIFT_ROOT'].'/packages/scribe/scribe.php';
require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';
require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php';
require_once $GLOBALS['THRIFT_ROOT'].'/transport/THttpClient.php';
require_once $GLOBALS['THRIFT_ROOT'].'/transport/TFramedTransport.php';
require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php'; //生成的文件
require_once dirname(__FILE__) . '/Hive.php';
//require_once dirname(__FILE__) .'/hive_types.php'; ERROR_REPORTING(E_ALL);
INI_SET('DISPLAY_ERRORS','ON'); $socket = new TSocket('hive.corp.gj.com',13080);
$socket->setDebug(TRUE); // 设置接收超时(毫秒)
$socket->setSendTimeout(10000);
$socket->setRecvTimeout(10000); //$transport = new TBufferedTransport($socket, 1024, 1024);
$transport = new TFramedTransport($socket);
$protocol = new TBinaryProtocol($transport);
$client = new HiveClient($protocol); try{
$transport->open();
}catch(TException $tx){
echo $tx->getMessage();
} //获取各个类目某一天的 PV UV
$taskId = $client->submitTask('xxx@xxx.com','web',"select regexp_extract(gjch, '^/([^/]+)', 1), count(*), count(distinct uuid) from table1 where dt = '2013-04-22' and gjch regexp '[^@]*/detail' GROUP BY regexp_extract(gjch, '^/([^/]+)', 1);"); if($taskId <= 0){
echo 'error submit';
exit;
}
echo $taskId . "\n"; $count = 50;
while($count > 0){
try{
//sleep以秒为单位,这里3分钟轮询一次
sleep(3*60);
}catch(TException $tx){} if($client->isTaskFinished($taskId)){
//echo $client->getResultURI($taskId);
$url = $client->getResultURI($taskId);
//echo $url;
$handle = fopen($url,"rb");
$content = stream_get_contents($handle);
echo $content;
fclose($handle); break;
}
$count--;
} $transport->close();
?>

3. ini_set用法
      ini_set函数是设置选项中的值,在执行函数后生效,脚本结束的时候,这个设置也失效。不是所有的选项都能被改函数设置的。具体那些值能够设置,可以查看手册中的列表。就是能够设置php.ini中的选项值比如,display_error选项关闭了,但是你要显示程序中的错误信息,方便你调试程序,那么就可以使用PHP ini_set函数:ini_set(”display_errors ”, “On”); 那么在你这个页面的程序都会显示错误信息了,而且你还可以使用error_reporting来设置显示的错误信息级别。 如果你需要增加脚本执行时间,那么可以设置:ini_set(”max_execution _time”, “180″); 那么脚本执行时间就由默认的30秒变为180秒,当然,你也可以使用set_time_limit()来设置。

其实你把PHP ini_set函数和ini_get结合使的话,非常好。比如你想在配置文件里添加自己的包含文件路径,但是你有没有权限更改php.ini,那么你可以结合两个函数:

ini_set(’include_path’ ,ini_get(’include_path’). ’:/your_include_dir:’);

eg:

<?php
$old_max_execution_time = ini_set('max_execution_time', 120);
echo "old timeout is $old_max_execution_time";
$max_execution_time = ini_get('max_execution_time');
echo "new timeout is $max_execution_time";
?>

4. error_reporting() 函数

定义和用法:error_reporting() 设置 PHP 的报错级别并返回当前级别。

语法:error_reporting(report_level)

如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值:

常量 描述
1 E_ERROR Fatal run-time errors. Errors that can not be recovered from. Execution of the script is halted
2 E_WARNING Non-fatal run-time errors. Execution of the script is not halted
4 E_PARSE Compile-time parse errors. Parse errors should only be generated by the parser
8 E_NOTICE Run-time notices. The script found something that might be an error, but could also happen when running a script normally
16 E_CORE_ERROR Fatal errors at PHP startup. This is like an E_ERROR in the PHP core
32 E_CORE_WARNING Non-fatal errors at PHP startup. This is like an E_WARNING in the PHP core
64 E_COMPILE_ERROR Fatal compile-time errors. This is like an E_ERROR generated by the Zend Scripting Engine
128 E_COMPILE_WARNING Non-fatal compile-time errors. This is like an E_WARNING generated by the Zend Scripting Engine
256 E_USER_ERROR Fatal user-generated error. This is like an E_ERROR set by the programmer using the PHP function trigger_error()
512 E_USER_WARNING Non-fatal user-generated warning. This is like an E_WARNING set by the programmer using the PHP function trigger_error()
1024 E_USER_NOTICE User-generated notice. This is like an E_NOTICE set by the programmer using the PHP function trigger_error()
2048 E_STRICT Run-time notices. PHP suggest changes to your code to help interoperability and compatibility of the code
4096 E_RECOVERABLE_ERROR Catchable fatal error. This is like an E_ERROR but can be caught by a user defined handle (see also set_error_handler())
8191 E_ALL All errors and warnings, except level E_STRICT (E_STRICT will be part of E_ALL as of PHP 6.0)

eg:

任意数目的以上选项都可以用“或”来连接(用 OR 或 |),这样可以报告所有需要的各级别错误。例如,下面的代码关闭了用户自定义的错误和警告,执行了某些操作,然后恢复到原始的报错级别:

<?php
//禁用错误报告
error_reporting(0); //报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE); //报告所有错误
error_reporting(E_ALL);
?>

5. global变量解析

Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件
eg:$a=123;
function aa() {

Global $a;  //如果不把$a定义为global变量,函数体内是不能访问$a的

echo $a;

}

aa();
总结:在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用
$global $a;

$a=123;
function f() {

echo $a;   //错误

}
//再看看下面一例
function f() {

global $a;

$a=123;

}
f();

echo $a;  //正确,可以使用

question:我在config.inc.php中定义了一些变量($a),在别的文件中函数外部 include("config.inc.php"),函数内部需要使用这些变量$a,如果没有声明的话,echo $a是打印不出来任何东西的。因此声明global $a,但是有很多函数和很多变量,总不能不断重复的这样声明吧? answer1:先在config.inc.php里定义常量:define(常量名,常量值) 再在其他需要用到的地方require 'config.inc.php', 然后就能在这个文件里直接使用这个常量了。

6. php中set_include_path函数用法
      php中的set_include_path函数可用于设置应用程序目录,开发项目时合理应用这些函数,不但可以让我们在include时不用一层一层的计算目录,还可以提高我们开发的效率,减少文件包含错误率.

eg:目录位置结构如下
/index.php 
/include/config.php
index.php:
<?php
set_include_path("include");
include("config.php");
?>
Now运行index.php ,我们include时只用写config.php就可以把/inlcude/config.php 文件包含进来 。In addional,设定多个include目录时用 " ;"  号分开 ,如: set_include_path("include;include2;include3;lib;c:\php\lib"); 可以用相对路径也可以用绝对路径. 
或许这段小小的代码你可能感觉不出set_include_path的好处,不过不要紧,你只要记住这么个代码可以实现这样的功能即可,在你以后技术提上去,开始开发大型项目时不要忘了有这么个函数,他可以减少你的工作量. 
姐妹函数get_include_path() 可以获取当时的include目录, 实现set_include_path同样功能的还有我们强大又可爱的ini_set()
用法:
ini_set('include_path', '目录名');           

7.PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的区分

DIRECTORY_SEPARATOR:路径分隔符,linux上就是‘/’    windows上是‘\’

PATH_SEPARATOR:include多个路径使用,在windows下,当你要include多个路径的话,你要用”;”隔开,但在linux下就使用”:”隔开的。

这2个常量的使用能够避免不同平台的兼容性问题。

 
8. php函数method_exists()与is_callable()的区别
      在php面相对象设计过程中,往往我们需要在调用某一个方法是否属于某一个类的时候做出判断,常用的方法有method_exists()和is_callable(),相比之下,is_callable()函数要高级一些,它接受字符串变量形式的方法名作为第一个参数,如果类方法存在并且可以调用,则返回true。如果要检测类中的方法是否能被调用,可以给函数传递一个数组而不是类的方法名作为参数。数组必须包含对象或类名,以将其作为它的第一个元素,要检查的方法名则作为第二个元素。如果该方法在类中存在,函数返回true。

代码示例:

  1. if (is_callable( array($obj, $method ) ) )
  2. {
  3. /*要操作的代码段*/
  4. }

is_callable()可以加收另外一个参数:一个布尔值,如果将该参数设置为true,函数仅仅检查给定的方法或函数名称的语法是否正确,而不检查其是否真正存在。method_exists()函数的参数为一个对象(或类名)和一个方法名,如果给定方法在对象的类中存在,则返回true

代码示例:

  1. if ( method_exists($obj, $method ) )
  2. {
  3. /*要操作的代码段*/
  4. }

php函数method_exists()与is_callable()的区别在于在php5中,一个方法存在并不意味着它就可以被调用。对于private,protected和public类型的方法,method_exits()会返回true,但是is_callable()会检查存在其是否可以访问,如果是private,protected类型的,它会返回false。

9. PHP中面向对象的设计概念

9.1 类与属性和方法

PHP中定义类语法格式:代码如下:

class classname [可选属性]{
public $property [=value];… //用public声明一个公共标识 然后给予一个变量 变量也可以赋值
function functionname ( args ){ //类的方法里的成员函数 代码} … //类的方法(成员函数)
}

9.2 构造函数

构造函数是在类中起到初始化的作用,构造函数的生成方法与其他函数一样只是其名称必须是__construct().

语法格式: function __construct(参数){ ......}

eg:

class Person{
public $name;
public $sex;
public $age;
function __construct($name,$sex,$age){
echo "我是构造函数";
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}

9.3 析构函数

当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。应在退出前在析构函数中用释放内存。 析构函数__destruct 析构函数没有任何参数
eg:

class person{
function _ _destruct( ) {
echo "bye bye !";
}
}
$a=new person();

9.4 访问类型

访问类型 public 公共的(公共修饰符) 类内部与类外部都可以访问的;

private 私有的(私有修饰符) 只能在类内部访问;

protected 受保护的(保护成员修饰符) 子类可以访问 类外部不可以访问

9.5 OOP的三大特性

封装,继承,多态 封装性:封装性就是把对象的属性和行为结合成一个独立的单位。 封装一个类需要两步 第一步是私有化一个类 第二步是用set和get 做出读取赋值的操作 他的好处是:隐藏类的实现细节,可以方便加入逻辑控制性,限制对属性的不合理操作,便于修改增强代码的可维护性。

__get与__set 一般说把类私有话更符合现实的逻辑。 预定义两种函数来进行获取与赋值操作。 __get 获取值通常是域的值 __set 设置值通常是域的值 __call 调用一个对象中不存在的方法时,就会产生错误call()这个方法来处理这种情况。

9.6静态属性和方法

static关键字来声明静态方法 static静态变量 在类的内部生成一个静态变量 就是能够被所有类的实例化,也就是说静态成员则放到了"初始化静态段",在类第一次被加载的时候放入的,可以让堆内存里面的每个对象所共享。

内部调用的使用方法:self::$静态属性、self::静态方法

eg:

static function p(){
echo self::$country;
echo self::PI;//访问常量
//echo $this->name;在静态方法中只能操作静态属性
//self::p();
}

外部调用的使用方法:类::$静态属性、类::静态方法
eg:

const CONSTANT = 'constant value';
echo self::CONSTANT;//类内部访问
echo ClassName::CONSTANT;//类外部访问

9.7 继承、重写
继承语法格式:class B extends A

覆盖父类原有属性 clone克窿对象,语法格式:$c=clone $p;

即$c克窿的对象$p ,输出echo $c->name;

9.8 对象的比较

===两个比较运算符;

==是比较两个对象的内容;

===是比较对象的句柄,即引用地址

instanceof操作符用于检测对象实力是否属于某一个类的类型 属于返回true 不属于返回false

9.9 抽象类与抽象方法

abstract class Person{
public $name;
abstract function getInfo();
}

9.10 接口

当一个类继承了一个接口之后,它要覆盖接口的所有方法,接口只能声明常量,接口的方法必须定义为共有否则无法继承,接口可以与多个接口间继承

interface PCI{
const TYPE="PCI";
//public $name; error
function start();
function stop();
}
interface A{ function a();}
interface B{ function b();}
interface C extends A{ function c();}
class D implements B,C{
function a(){}
function b(){}
function c(){}
}

9.11 常用的魔术方法
      以上我们已经了解的常用魔术方法有:_construct(),_destruct(),_clone.下面我们再接着介绍几个常用魔术方法. _get(),_set();   

以上两个方法用于对私有成员精细复制或者获取值的操作. _set()在程序运行中为私有的成员属性设置值,它不需要任何返回值._set()方法包括两个不可省略的参数:变量名和变量值.这个方法不需要主动调用,可在方法钱加上prive关键字. _get():在程序运行中,在对象的外部获取私有成员的属性的值.他有一个参数:私有成员属性名称.他返回一个允许对象在外部使用的值.此方法同样不许主动调用.

_isset(), _unset():   

isset()函数用于检测变量是否存在.而在面向对象中可以通过isset()函数对公有的成员属性进行检测,但对私有成员属性,此函数则不起作用.因此,_isset()函数正是为了起到此作用而创建.格式如下:   

bool _isset(string name);   

_unset()则同样为了删除制定的变量和对象的私有成员属性.格式如下:   

void _unset(string name);// _call():   

_call()方法的作用是当程序试图调用不存在或不可见的成员方法时,php会先调用_call()方法来存储方法名及其参数(方法名和方法参数).其中方法参数是以数组的形式存在.

_toString()方法: 其作用是当使用echo 或者print输出对象时,将对象转化为字符串. 如果没有_toString()方法,直接输出对象时将会发生致命错误.   输出对象时应注意的是,echo 或print 语句后面直接跟要输出的对象,中间不要加多余的字符,否则_toSting()将不会被执行.

_autoload()方法: 将一个独立的,完整的类保存到一个php页中,并且文件名和类名保持一致,这是每个开发人员都需要养成的良好习惯.这样下次在使用的时候就能够轻松的找到它.但有一种情况:如果要在一个页面中引进很多的类,就需要使用include_once()函数或者require_once()函数一个个地引入.php5中引入_autoload()方法可以自动实例化需要使用的类.当一个类还没实例化时,_autoload()会自动到指定的路径下面自动查找和类名相同的文件.找到则继续执行,否则报错.

<?php
  function _autoload($class_name){
    $class_path = $class_name.'.class.php';
    if(file_exists($class_path)){
      include_once($class_path);
    }else{
      echo '类不存在或者类路径错误';
    }
}
  $class = new Class(); //将会自动加载.
  echo $class; //输出类内容.如自定义了_toString()方法;则会输出_toString()中定义的内容.
?>

http://bbs.csdn.net/topics/390535289

http://blog.csdn.net/quicktest/article/details/7453189

http://www.it165.net/pro/html/201208/3572.html

http://www.aiezu.com/code/php_abs_length_byteslength.html

http://yjfnypm20061987.blog.163.com/blog/static/231049892010111343940986/

PHP基础记录的更多相关文章

  1. python 文本编辑基础记录

    不熟悉编码方式,同时python的编码方式折磨我了很长时间,记录下,以免忘记,本文内容存在错误,是自己理解,看到仅当参考 Unicode 是字符集,有点像一本字典,utf-8是在unicode这本字典 ...

  2. [php基础]记录PHP错误日志 display_errors与log_errors的区别

    display_errors 错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项.错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利.推荐关闭此选项. display ...

  3. java基础记录(一):开发环境的配置

    一.JDK的安装与环境变量配置 1.jdk下载与安装. jdk1.8.0_192下载地址 下载完成后,双击运行安装文件.可以选择你要安装的位置或者直接下一步,等待安装完成,最后关闭. 2.配置环境变量 ...

  4. mysql基础记录

    1. 概念介绍 数据库:专门存储数据,存储数据的仓库,同时提供了对数据的操作方法,增删改查的方法 事务 事务:是作为一个单元的一组有序的数据库操作,如果组当中所有操作都成功,则事务执行成功,如果有一个 ...

  5. jquery简单笔记(1) - 基础记录

    一.dom对象及jquery对象相互转换 jquery对象转换成dom对象,即 [index] 和 get(index) 第一种方式: var $j = $('#id'); // jquery对象 v ...

  6. js与jq基础记录

    1.在js传递参数中含加号(+)的处理方式: 只需要把js中传过去的+号替换成base64 编码 %2B:encodeURI(str).replace(/\+/g,'%2B'). 2.随机产生8位随机 ...

  7. 关于linux网络基础记录

    1.linux操作系统是一套非常稳定的操作系统,作用永不止于提供网络服务那么简单.(www.Mail.FTP.DNS.DHCP.NAT.Router) 2.对于一个服务器而言,“搭建容易维护难”:维护 ...

  8. 【代码审计】PHP代码审计---基础记录

    PHP伪协议 PHP伪协议事实上是其支持的协议与封装协议,支持的种类有以下12种. * file:// - 访问本地文件系统 * http:// - 访问 HTTP(s) 网址 * ftp:// - ...

  9. Git基础-第2章

    简单的Git基础概念: repository: 仓库 track:  跟踪 stage: 暂存 commit:    提交 push:        推送 pull:    拉取 一.获取Git仓库 ...

随机推荐

  1. 2018.08.09 bzoj4719: [Noip2016]天天爱跑步(树链剖分)

    传送门 话说开始上文化课之后写题时间好少啊. 这道题将一个人的跑步路线拆成s->lca,lca->t,然后对于第一段上坡路径要经过的点,当前这个人能对它产生贡献当且仅当dep[s]-dep ...

  2. 表格边框重复合并属性: border-collapse:collapse;

    table { border-collapse:collapse; }

  3. MemCache 安全使用原则(自己整理,仅供参考)

    // 触发器:作用是检查缓存时否可用(不用add做触发器),避免缓存不可用时add返回false按非首次登陆处理,导致不能增加成长值. memCachedClient.get(memCacheKey) ...

  4. (匹配 最小路径覆盖)Air Raid --hdu --1151

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1151 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  5. Hdu1401 Solitaire 2017-01-18 17:21 33人阅读 评论(0) 收藏

    Solitaire Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Sub ...

  6. PAT甲 1012. The Best Rank (25) 2016-09-09 23:09 28人阅读 评论(0) 收藏

    1012. The Best Rank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To eval ...

  7. KbmMW安装

    系统环境及相关软件版本: Windows 7 64位, Delphi XE Version 15.0.3953.35171 , Indy 10.5.7 kbmMW4.90.04 , kbmMemTab ...

  8. Delphi for iOS开发指南(6):在iOS应用程序中使用ComboBox组件来从列表中选择某一项

    http://blog.csdn.net/delphiteacher/article/details/8924110 Delphi for iOS开发指南(6):在iOS应用程序中使用ComboBox ...

  9. 基于统计的无词典的高频词抽取(二)——根据LCP数组计算词频

    接着上文[基于统计的无词典的高频词抽取(一)——后缀数组字典序排序],本文主要讲解高频子串抽取部分. 如果看过上一篇文章的朋友都知道,我们通过 快排 或 基数排序算出了存储后缀数组字典序的PAT数组, ...

  10. linux系统编程之信号(二):信号处理流程(产生、注册、注销、执行)

        对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个阶段: 信号诞生 信号在进程中注册 信号在进程中的注销 信号处理函数执行 1    信号诞生     信号事件 ...