为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
PHP进阶篇_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

PHP进阶篇

Jason PHP开发工程师
难度初级
时长 9小时28分
  • 我们再举一个更实用的例子来说明一下PHP clone这种浅拷贝带来的后果: class testClass { public $str_data; public $obj_data; } $dateTimeObj = new DateTime("2014-07-05", new DateTimeZone("UTC")); $obj1 = new testClass(); $obj1->str_data ="aaa"; $obj1->obj_data = $dateTimeObj; $obj2 = clone $obj1; var_dump($obj1); // str_data:"aaa" obj_data:"2014-07-05 00:00:00" var_dump($obj2); // str_data:"aaa" obj_data:"2014-07-05 00:00:00" $obj2->str_data ="bbb"; $obj2->obj_data->add(new DateInterval('P10D')); //给$obj2->obj_date 的时间增加了10天 var_dump($obj1); // str_data:"aaa" obj_data:"2014-07-15 00:00:00" !!!! var_dump($obj2); // str_data:"bbb" obj_data:"2014-07-15 00:00:00" var_dump($dateTimeObj) // 2014-07-15 00:00:00" 这一下可以更加清楚的看到问题了吧。 一般来讲,你用clone来复制对象,希望是把两个对象彻底分开,不希望他们之间有任何关联, 但由于clone的shallow copy的特性, 有时候会出现非你期望的结果,上面的例子中, 1) $obj1->obj_data =$dateTimeObj 这句话实际上是个引用类型的赋值. 还记得前面提到的PHP中对象直接的赋值是引用操作么?除非你用$obj1->obj_dat = clone $dataTimeObj!
    查看全部
  • PHP中的对象复制及__clone() 函数 在PHP中, 对象间的赋值操作实际上是引用操作 (事实上,绝大部分的编程语言都是如此! 主要原因是内存及性能的问题) , 比如 : class myclass { public $data; } $obj1 = new myclass(); $obj1->data = "aaa"; $obj2 = $obj1; $obj2->data ="bbb"; //$obj1->data的值也会变成"bbb" 因为$obj1和$obj2都是指向同一个内存区的引用,所以修改任何一个对象都会同时修改另外一个对象。 在有些时候,我们其实不希望这种reference式的赋值方式, 我们希望能完全复制一个对象,这是侯就需要用到 Php中的clone (对象复制)。 class myclass { public $data; } $obj1 = new myclass(); $obj1->data ="aaa"; $obj2 = clone $obj1; $obj2->data ="bbb"; // $obj1->data的值仍然为"aaa" 因为clone的方式实际上是对整个对象的内存区域进行了一次复制并用新的对象变量指向新的内存, 因此赋值后的对象和源对象相互之间是基本来说独立的。 什么? 基本独立?!这是什么意思? 因为PHP的object clone采用的是浅拷贝(shallow copy)的方法, 如果对象里的属性成员本身就是reference类型的,clone以后这些成员并没有被真正复制,仍然是引用的。 (事实上,其他大部分语言也是这样实现的, 如果你对C++的内存,拷贝,copy constructor等概念比较熟悉,就很容易理解这个概念), 下面是一个例子来说明: class myClass{ public $data; } $sss ="aaa"; $obj1 = new myClass(); $obj1->data =&$sss; //注意,这里是个reference! $obj2 = clone $obj1; $obj2->data="bbb"; //这时,$obj1->data的值变成了"bbb" 而不是"aaa"! var_dump($obj1); var_dump($obj2);
    查看全部
  • 关于limit一般形式是 limit n,m 表示从结果中n行开始取,一共取m行; 注意其中n是从0开始,即第一行的n为0。 limit 后只有一个数字 例如limit a 是(从结果第一行开始)取a行,等价于limit 0,a select * from user limit 1 这里面的limit 1是什么意思 例如 limit 2,3 表示取结果中的第3、4、5行 limit 2 表示取第1、2行
    查看全部
  • 1.进行连接数据库 2.选择要连接的数据库中的那个表 3.设置编码格式utf-8 4.进行增删改查
    查看全部
  • PHP5可以在类中使用__construct()定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,因此常用来在对象创建的时候进行一些初始化工作。 class Car { function __construct() { print "构造函数被调用\n"; } } $car = new Car(); //实例化的时候 会自动调用构造函数__construct,这里会输出一个字符串 在子类中如果定义了__construct则不会调用父类的__construct,如果需要同时调用父类的构造函数,需要使用parent::__construct()显式的调用。 class Car { function __construct() { print "父类构造函数被调用\n"; } } class Truck extends Car { function __construct() { print "子类构造函数被调用\n"; parent::__construct(); } } $car = new Truck(); 同样,PHP5支持析构函数,使用__destruct()进行定义,析构函数指的是当某个对象的所有引用被删除,或者对象被显式的销毁时会执行的函数。 class Car { function __construct() { print "构造函数被调用 \n"; } function __destruct() { print "析构函数被调用 \n"; } } $car = new Car(); //实例化时会调用构造函数 echo '使用后,准备销毁car对象 \n'; unset($car); //销毁时会调用析构函数 当PHP代码执行完毕以后,会自动回收与销毁对象,因此一般情况下不需要显式的去销毁对象。
    查看全部
  • 首先要做的是与数据库建立连接,通常我们使用mysql_connect函数进行数据库连接,该函数需要指定数据库的地址,用户名及密码。 $host = 'localhost'; $user = 'code1'; $pass = ''; $link = mysql_connect($host, $user, $pass); PHP连接数据库的方式类似于直接在命令行下通过进行连接,类似:mysql -hlocalhost -ucode1 -p,当连接成功以后,我们需要选择一个操作的数据库,通过mysql_select_db函数来选择数据库。 mysql_select_db('code1'); 通常我们会先设置一下当前连接使用的字符编码,一般的我们会使用utf8编码。 mysql_query("set names 'utf8'"); 通过上面的步骤,我们就与数据库建立了连接,可以进行数据操作了。
    查看全部
  • 本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除。应使用 MySQLi 或 PDO_MySQL 扩展来替换之。参见 MySQL:选择 API 指南以及相关 FAQ 以获取更多信息。用以替代本函数的有: mysqli_connect() PDO::__construct()
    查看全部
  • $ex->getMessage() 追踪异常发生的路径
    查看全部
  • $ex->getLine()捕获异常发生所在的行
    查看全部
  • 使用return关键字可以使函数返回值,可以返回包括数组和对象的任意类型,如果省略了 return,则默认返回值为 NULL。 function add($a) { return $a+1; } $b = add(1); 返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行,因此下面函数的返回值跟上面的函数是一样的。 function add($a) { return $a+1; $a = 10; return $a+20; } $b = add(1); 函数不能返回多个值,但可以通过返回一个数组来得到类似的效果。 function numbers() { return array(1, 2, 3); } list ($one, $two, $three) = numbers();
    查看全部
    0 采集 收起

    2017-01-06

  • imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h ) 将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。
    查看全部
  • imageline($img,0,rand(0, 40),100,rand(0, 40),$black);
    查看全部
    0 采集 收起

    2017-01-06

  • 为了使验证码更加的安全通常会采用绘制一些噪点,干扰线段,对输出的字符进行倾斜、扭曲等操作。使用imagesetpixel绘制点来实现噪点干扰,但是只绘制一个点的作用不大,因此这里常常会使用循环进行随机绘制。 $black = imagecolorallocate($img, 0x00, 0x00, 0x00); imagesetpixel($im, rand(0, 100) , rand(0, 100) , $black);
    查看全部
    1 采集 收起

    2017-01-06

  • 通过imagepng可以直接输出图像到浏览器,希望将处理好的图像保存到文件,以便可以多次使用。通过指定路径参数将图像保存到文件中。使用imagepng可以将图像保存成png格式,如果要保存成其他格式需要使用不同的函数,使用imagejpeg将图片保存成jpeg格式,imagegif将图片保存成gif格式,需要说明的是,imagejpeg会对图片进行压缩,因此还可以设置一个质量参数。 $filename = 'img.jpg'; ​imagejpeg($img, $filename, 80);
    查看全部
    0 采集 收起

    2017-01-06

  • 使用imagestring函数来进行文字的绘制,这个函数的参数很多:imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ),可以通过$font来设置字体的大小,x,y设置文字显示的位置,$s是要绘制的文字,$col是文字的颜色。
    查看全部
    0 采集 收起

    2017-01-06

举报

0/150
提交
取消
课程须知
需要有一定的网页基础知识如HTML、CSS样式等,并且已经学习完成《PHP入门篇》对PHP已经有了简单的了解,如变量、常量、数据类型等。
老师告诉你能学到什么?
全面的掌握PHP的理论知识与实践中的应用方法,提高编程能力与掌握网页开发技能。
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!