목차
简介
SPL接口
Iterator 迭代器接口
ArrayAccess 数组式访问接口
IteratorAggregate 聚合式迭代器接口
RecursiveIterator
SeekableIterator
Countable
SPL数据结构
SplDoublyLinkedList 双向链表
SplStack 栈
SplQueue 队列
SplHeap 堆
SplMaxHeap 最大堆
SplMinHeap 最小堆
SplPriorityQueue 优先级队列
SplFixedArray 定长数组
SplObjectStorage 对象容器
SPL类
SPL的内置类
SplFileInfo
SplFileObject
DirectoryIterator
ArrayObject
ArrayIterator
백엔드 개발 PHP 튜토리얼 PHP标准库 (SPL) 笔记

PHP标准库 (SPL) 笔记

Jun 23, 2016 pm 01:02 PM

简介

SPL是Standard PHP Library(PHP标准库)的缩写。

The Standard PHP Library (SPL) is a collection of interfaces and classes that are meant to solve common problems.

官网说,SPL是用来解决典型问题(common problems)的一组接口与类的集合。

那么,什么是common problems呢?

- 数据结构    解决数据怎么存储问题- 元素遍历    数据怎么查看- 常用方法的统一调用    数组、集合大小    自定义遍历- 类自动加载    spl_autoload_register
로그인 후 복사

包含哪些内容?

  • 数据结构
  • 基础接口
  • 基础函数
  • 迭代器
  • 异常
  • 其它
  • SPL接口

    Iterator 迭代器接口

    SPL规定,所有实现了Iterator接口的class,都可以用在foreach Loop中。Iterator接口中包含5个必须实现的方法:

    interface Iterator extends Traversable{    //返回当前元素    public mixed current ( void );        //返回当前元素的键    public scalar key ( void );        //向前移动到下一个元素    public void next ( void );        //返回到迭代器的第一个元素    public void rewind ( void );        //检查当前位置是否有效    public boolean valid ( void );}
    로그인 후 복사

    ArrayAccess 数组式访问接口

    实现ArrayAccess接口,可以使得object像array那样操作。ArrayAccess接口包含四个必须实现的方法:

    interface ArrayAccess {    //检查一个偏移位置是否存在     public mixed offsetExists ( mixed $offset  );        //获取一个偏移位置的值     public mixed offsetGet( mixed $offset  );        //设置一个偏移位置的值     public mixed offsetSet ( mixed $offset  );        //复位一个偏移位置的值     public mixed offsetUnset  ( mixed $offset  );}
    로그인 후 복사

    IteratorAggregate 聚合式迭代器接口

    假设对象A实现了上面的ArrayAccess接口,这时候虽然可以像数组那样操作,却无法使用foreach遍历,除非实现了前面提到的Iterator接口。

    另一个解决方法是,有时会需要将数据和遍历部分分开,这时就可以实现IteratorAggregate接口。它规定了一个getIterator()方法,返回一个使用Iterator接口的object。

    IteratorAggregate extends Traversable {    /* 获取一个外部迭代器 */    abstract public Traversable getIterator ( void )}
    로그인 후 복사

    示例:

    <?phpclass myData implements IteratorAggregate {    public $property1 = "Public property one";    public $property2 = "Public property two";    public $property3 = "Public property three";    public function __construct() {        $this->property4 = "last property";    }    public function getIterator() {        return new ArrayIterator($this);    }}$obj = new myData;foreach($obj as $key => $value) {    var_dump($key, $value);    echo "\n";}?>
    로그인 후 복사

    注意:
    虽然都继承自Traversable,但这是一个无法在 PHP 脚本中实现的内部引擎接口。我们直接使用IteratorAggregate 或 Iterator 接口来代替它。

    RecursiveIterator

    这个接口用于遍历多层数据,它继承了Iterator接口,因而也具有标准的current()、key()、next()、 rewind()和valid()方法。同时,它自己还规定了getChildren()和hasChildren()方法。The getChildren() method must return an object that implements RecursiveIterator。

    SeekableIterator

    SeekableIterator接口也是Iterator接口的延伸,除了Iterator的5个方法以外,还规定了seek()方法,参数是元素的位置,返回该元素。如果该位置不存在,则抛出OutOfBoundsException。

    Countable

    这个接口规定了一个count()方法,返回结果集的数量。

    SPL数据结构

    数据结构是计算机存储、组织数据的方式。

    SPL提供了双向链表、堆栈、队列、堆、降序堆、升序堆、优先级队列、定长数组、对象容器。

    基本概念
    Bottom:节点,第一个节点称Bottom;
    Top:最后添加的链表的节点称Top;
    当前节点(Current):链表指针指向的节点称为当前节点;

    SplDoublyLinkedList 双向链表

    SplDoublyLinkedList 实现了Iterator , ArrayAccess , Countable接口。

    类摘要

    SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {/* 方法 */public __construct ( void )public void add ( mixed $index , mixed $newval )public mixed bottom ( void )public int count ( void )public mixed current ( void )public int getIteratorMode ( void )public bool isEmpty ( void )public mixed key ( void )public void next ( void )public bool offsetExists ( mixed $index )public mixed offsetGet ( mixed $index )public void offsetSet ( mixed $index , mixed $newval )public void offsetUnset ( mixed $index )public mixed pop ( void )public void prev ( void )public void push ( mixed $value )public void rewind ( void )public string serialize ( void )public void setIteratorMode ( int $mode )public mixed shift ( void )public mixed top ( void )public void unserialize ( string $serialized )public void unshift ( mixed $value )public bool valid ( void )}
    로그인 후 복사

    注意:
    SplDoublyLinkedList::setIteratorMode用来设置链表模式:

    迭代方向:

    SplDoublyLinkedList::IT_MODE_LIFO (Stack style)SplDoublyLinkedList::IT_MODE_FIFO (Queue style)
    로그인 후 복사

    迭代器行为:

    SplDoublyLinkedList::IT_MODE_DELETE (Elements are deleted by the iterator)SplDoublyLinkedList::IT_MODE_KEEP (Elements are traversed by the iterator)
    로그인 후 복사

    默认模式: SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_KEEP

    当前节点操作:
    rewind:将链表的当前指针指向第一个元素
    current:链表当前指针,当节点被删除后,会指向空节点
    prev:上一个
    next:下一个

    增加节点操作:
    push 在双向链表的结尾处将元素压入
    unshift 前置双链表元素,预备值在双链表的开始

    删除节点操作:
    pop 从双向链表的结尾弹出一个节点,不会改变指针位置
    shift从双向链表的开头弹出一个节点,不会改变指针位置

    定位操作:
    bottom 返回当前双向链表的第一个节点的值,当前指针不变
    top返回当前双向链表的最后一个节点的值,当前指针不变

    特定节点操作:
    offsetExists 理解为key是否存在
    offsetGet将key节点拿出来
    offsetSet把数据刷新
    offsetUnset删除

    示例:SplDoublyLinkedList.php

    <?php/***SplDoublyLinkedList 类学习*/$obj = new SplDoublyLinkedList();$obj -> push(1);//把新的节点添加到链表的顶部top$obj -> push(2);$obj -> push(3);$obj -> unshift(10);//把新节点添加到链表底部bottomprint_r($obj);$obj ->rewind();//rewind操作用于把节点指针指向Bottom所在节点$obj -> prev();//使指针指向上一个节点,靠近Bottom方向echo 'next node :'.$obj->current().PHP_EOL;$obj -> next();$obj -> next();echo 'next node :'.$obj->current().PHP_EOL;$obj -> next();if($obj -> current())        echo 'current node valid'.PHP_EOL;else        echo 'current node invalid'.PHP_EOL;$obj ->rewind();//如果当前节点是有效节点,valid返回trueif($obj->valid())        echo 'valid list'.PHP_EOL;else        echo 'invalid list'.PHP_EOL;print_r($obj);echo 'pop value :'.$obj -> pop().PHP_EOL;print_r($obj);echo 'next node :'.$obj ->current().PHP_EOL;$obj ->next();//1$obj ->next();//2$obj -> pop();//把top位置的节点从链表中删除,并返回,如果current正好指>向top位置,那么调用pop之后current()会失效echo 'next node:'.$obj -> current().PHP_EOL;print_r($obj);$obj ->shift();//把bottom位置的节点从链表中删除,并返回print_r($obj);
    로그인 후 복사

    SplStack 栈

    栈(Stack)是一种特殊的线性表,因为它只能在线性表的一端进行插入或删除元素(即进栈和出栈)。

    栈是一种后进先出(LIFO)的数据结构。

    SplStack 继承自 双向链表 SplDoublyLinkedList

    示例:

    <?php$stack = new SplStack();$stack->push(1);$stack->push(2);$stack->push(3);echo 'bottom:'.$stack -> bottom().PHP_EOL;echo "top:".$stack->top().PHP_EOL;//堆栈的offset=0,是top所在位置(即栈的末尾)$stack -> offsetSet(0, 10);echo "top:".$stack->top().'<br/>';//堆栈的rewind和双向链表的rewind相反,堆栈的rewind使得当前指针指向top所在位置,而双向链表调用之后指向bottom所在位置$stack -> rewind();echo 'current:'.$stack->current().'<br/>';$stack ->next();//堆栈的next操作使指针指向靠近bottom位置的下一个节点,而双向链表是靠近top的下一个节点echo 'current:'.$stack ->current().'<br/>';//遍历堆栈$stack -> rewind();while ($stack->valid()) {    echo $stack->key().'=>'.$stack->current().PHP_EOL;    $stack->next();//不从链表中删除元素}echo '<br/>';echo $stack->pop() .'--';echo $stack->pop() .'--';echo $stack->pop() .'--';
    로그인 후 복사

    输出:

    bottom:1 top:3 top:10current:10current:22=>10 1=>2 0=>1 10--2--1--
    로그인 후 복사

    SplQueue 队列

    队列是一种先进先出(FIFO)的数据结构。使用队列时插入在一端进行而删除在另一端进行。

    SplQueue 也是继承自 双向链表 SplDoublyLinkedList,并有自己的方法:

    /* 方法 */__construct ( void )mixed dequeue ( void )void enqueue ( mixed $value )void setIteratorMode ( int $mode )
    로그인 후 복사

    示例1:

    <?php$queue = new SplQueue();$queue->enqueue(1);$queue->enqueue(2);echo $queue->dequeue() .'--';echo $queue->dequeue() .'--';//1--2--
    로그인 후 복사

    示例2:

    <?php$obj = new SplQueue();$obj -> enqueue('a');$obj -> enqueue('b');$obj -> enqueue('c');echo 'bottom:'.$obj -> bottom().PHP_EOL;echo 'top:'.$obj -> top();echo '<br/>';//队列里的offset=0是指向bottom位置$obj -> offsetSet(0,'A');echo 'bottom:'.$obj -> bottom();echo '<br/>';//队列里的rewind使得指针指向bottom所在位置的节点$obj -> rewind();echo 'current:'.$obj->current();echo '<br/>';while ($obj ->valid()) {    echo $obj ->key().'=>'.$obj->current().PHP_EOL;    $obj->next();//}echo '<br/>';//dequeue操作从队列中提取bottom位置的节点,并返回,同时从队列里面删除该元素echo 'dequeue obj:'.$obj->dequeue();echo '<br/>';echo 'bottom:'.$obj -> bottom().PHP_EOL;
    로그인 후 복사

    输出:

    bottom:a top:cbottom:Acurrent:A0=>A 1=>b 2=>c dequeue obj:Abottom:b
    로그인 후 복사

    SplHeap 堆

    堆(Heap)就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆(二叉树的一种)实现。

    根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。二叉堆还常用于排序(堆排序)。

    SplHeap 是一个抽象类,实现了Iterator , Countable接口。最大堆(SplMaxHeap)和最小堆(SplMinHeap)就是继承它实现的。最大堆和最小堆并没有额外的方法。

    如皋要使用SplHeap类,需要实现其抽象方法int compare ( mixed $value1 , mixed $value2 )。

    类摘要:

    abstract SplHeap implements Iterator , Countable {    /* 方法 */    public __construct ( void )    abstract protected int compare ( mixed $value1 , mixed $value2 )    public int count ( void )    public mixed current ( void )    public mixed extract ( void )    public void insert ( mixed $value )    public bool isEmpty ( void )    public mixed key ( void )    public void next ( void )    public void recoverFromCorruption ( void )    public void rewind ( void )    public mixed top ( void )    public bool valid ( void )}
    로그인 후 복사

    示例:

    <?phpclass MySimpleHeap extends SplHeap{    //compare()方法用来比较两个元素的大小,绝对他们在堆中的位置    public function  compare( $value1, $value2 ) {        return ( $value1 - $value2 );    }} $obj = new MySimpleHeap();$obj->insert( 4 );$obj->insert( 8 );$obj->insert( 1 );$obj->insert( 0 ); echo $obj->top();  //8echo $obj->count(); //4echo '<br/>'; foreach( $obj as $number ) {    echo $number.PHP_EOL;}
    로그인 후 복사

    输出:

    848 4 1 0
    로그인 후 복사

    SplMaxHeap 最大堆

    最大堆(SplMaxHeap)继承自抽象类SplHeap实现的。最大堆并没有额外的方法。

    SplMinHeap 最小堆

    最小堆(SplMinxHeap)继承自抽象类SplHeap实现的。最小堆并没有额外的方法。

    如下:最小堆(任意节点的优先级不小于它的子节点)

    示例:

    <?php$obj = new SplMinHeap();$obj->insert(4);$obj->insert(8);//提取echo $obj->extract(). PHP_EOL;echo $obj->extract();//4 8
    로그인 후 복사

    SplPriorityQueue 优先级队列

    优先级队列SplPriorityQueue是基于堆实现的。和堆一样,也有int compare ( mixed $priority1 , mixed $priority2 )方法。

    SplPriorityQueue 实现了Iterator , Countable 接口。

    示例:

    $pq = new SplPriorityQueue(); $pq->insert('a', 10);$pq->insert('b', 1);$pq->insert('c', 8); echo $pq->count() .PHP_EOL; //3echo $pq->current() . PHP_EOL; //a /** * 设置元素出队模式 * SplPriorityQueue::EXTR_DATA 仅提取值 * SplPriorityQueue::EXTR_PRIORITY 仅提取优先级 * SplPriorityQueue::EXTR_BOTH 提取数组包含值和优先级 */$pq->setExtractFlags(SplPriorityQueue::EXTR_DATA); while($pq->valid()) {    print_r($pq->current());  //a c b    $pq->next();}
    로그인 후 복사

    SplFixedArray 定长数组

    SplFixedArray 实现了Iterator , ArrayAccess , Countable 接口。

    和普通数组不一样,定长数组规定了数组的长度。优势就是比普通的数组处理更快。

    <?php$arr = new SplFixedArray(5);$arr[0] = 1;$arr[1] = 2;$arr[2] = 3;print_r($arr);//SplFixedArray Object ( [0] => 1 [1] => 2 [2] => 3 [3] => [4] => )
    로그인 후 복사

    SplObjectStorage 对象容器

    SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候。该类实现了Countable ,Iterator ,Serializable ,ArrayAccess四个接口。可实现统计、迭代、序列化、数组式访问等功能。

    示例:

    class A {    public $i;    public function __construct($i) {        $this->i = $i;    }} $a1 = new A(1);$a2 = new A(2);$a3 = new A(3);$a4 = new A(4); $container = new SplObjectStorage(); //SplObjectStorage::attach 添加对象到Storage中$container->attach($a1);$container->attach($a2);$container->attach($a3); //SplObjectStorage::detach 将对象从Storage中移除$container->detach($a2); //SplObjectStorage::contains用于检查对象是否存在Storage中var_dump($container->contains($a1)); //truevar_dump($container->contains($a4)); //false //遍历$container->rewind();while($container->valid()) {    var_dump($container->current());    $container->next();}
    로그인 후 복사

    SPL类

    SPL的内置类

    SPL除了定义一系列Interfaces以外,还提供一系列的内置类,它们对应不同的任务,大大简化了编程。
    查看所有的内置类,可以使用下面的代码:

    <?php// a simple foreach() to traverse the SPL class namesforeach(spl_classes() as $key=>$value)        {        echo $key.' -> '.$value.'<br />';        }?>
    로그인 후 복사

    SplFileInfo

    PHP SPL中提供了SplFileInfo和SplFileObject两个类来处理文件操作。

    SplFileInfo用来获取文件详细信息:

    $file = new SplFileInfo('foo-bar.txt'); print_r(array(    'getATime' => $file->getATime(), //最后访问时间    'getBasename' => $file->getBasename(), //获取无路径的basename    'getCTime' => $file->getCTime(), //获取inode修改时间    'getExtension' => $file->getExtension(), //文件扩展名    'getFilename' => $file->getFilename(), //获取文件名    'getGroup' => $file->getGroup(), //获取文件组    'getInode' => $file->getInode(), //获取文件inode    'getLinkTarget' => $file->getLinkTarget(), //获取文件链接目标文件    'getMTime' => $file->getMTime(), //获取最后修改时间    'getOwner' => $file->getOwner(), //文件拥有者    'getPath' => $file->getPath(), //不带文件名的文件路径    'getPathInfo' => $file->getPathInfo(), //上级路径的SplFileInfo对象    'getPathname' => $file->getPathname(), //全路径    'getPerms' => $file->getPerms(), //文件权限    'getRealPath' => $file->getRealPath(), //文件绝对路径    'getSize' => $file->getSize(),//文件大小,单位字节    'getType' => $file->getType(),//文件类型 file dir link    'isDir' => $file->isDir(), //是否是目录    'isFile' => $file->isFile(), //是否是文件    'isLink' => $file->isLink(), //是否是快捷链接    'isExecutable' => $file->isExecutable(), //是否可执行    'isReadable' => $file->isReadable(), //是否可读    'isWritable' => $file->isWritable(), //是否可写));
    로그인 후 복사

    SplFileObject

    SplFileObject继承SplFileInfo并实现RecursiveIterator、 SeekableIterator接口 ,用于对文件遍历、查找、操作遍历:

    try {    foreach(new SplFileObject('foo-bar.txt') as $line) {        echo $line;    }} catch (Exception $e) {    echo $e->getMessage();}
    로그인 후 복사

    查找指定行:

    try {    $file = new SplFileObject('foo-bar.txt');    $file->seek(2);    echo $file->current();} catch (Exception $e) {    echo $e->getMessage();}
    로그인 후 복사

    写入csv文件:

    $list  = array (    array( 'aaa' ,  'bbb' ,  'ccc' ,  'dddd' ),    array( '123' ,  '456' ,  '7891' )); $file  = new  SplFileObject ( 'file.csv' ,  'w' ); foreach ( $list  as  $fields ) {    $file -> fputcsv ( $fields );}
    로그인 후 복사

    DirectoryIterator

    该类继承自SplFileInfo并实现SeekableIterator接口。

    这个类用来查看一个目录中的所有文件和子目录:

    <?phptry{  /*** class create new DirectoryIterator Object ***/    foreach ( new DirectoryIterator('./') as $Item )        {        echo $Item.'<br />';        }    }/*** if an exception is thrown, catch it here ***/catch(Exception $e){    echo 'No files Found!<br />';}?>
    로그인 후 복사

    ArrayObject

    该类实现了ArrayAccess ,Countable, IteratorAggregate, Serializable接口。

    这个类可以将Array转化为object。

    <?php/*** a simple array ***/$array = array('koala', 'kangaroo', 'wombat', 'wallaby', 'emu', 'kiwi', 'kookaburra', 'platypus');/*** create the array object ***/$arrayObj = new ArrayObject($array);/*** iterate over the array ***/for($iterator = $arrayObj->getIterator();   /*** check if valid ***/   $iterator->valid();   /*** move to the next array member ***/   $iterator->next())    {    /*** output the key and current array value ***/    echo $iterator->key() . ' => ' . $iterator->current() . '<br />';    }?>
    로그인 후 복사

    ArrayIterator

    该类实现了ArrayAccess, Countable , SeekableIterator , Serializable 接口。

    这个类实际上是对ArrayObject类的补充,为后者提供遍历功能。

    <?php/*** a simple array ***/$array = array('koala', 'kangaroo', 'wombat', 'wallaby', 'emu', 'kiwi', 'kookaburra', 'platypus');try {    $object = new ArrayIterator($array);    foreach($object as $key=>$value)        {        echo $key.' => '.$value.'<br />';        }    }catch (Exception $e)    {    echo $e->getMessage();    }?>
    로그인 후 복사

    参考
    1、PHP: SPL - Manual
    http://php.net/manual/zh/book.spl.php
    2、PHP: 预定义接口 - Manual
    http://php.net/manual/zh/reserved.interfaces.php
    3、PHP SPL笔记 - 阮一峰的网络日志
    http://www.ruanyifeng.com/blog/2008/07/php_spl_notes.html
    4、PHP SPL标准库之文件操作(SplFileInfo和SplFileObject) - PHP点点通
    http://www.phpddt.com/php/SplFileObject.html

    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    인기 기사

    R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
    3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 최고의 그래픽 설정
    3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
    3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
    3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

    뜨거운 도구

    메모장++7.3.1

    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    PHP 로깅 : PHP 로그 분석을위한 모범 사례 PHP 로깅 : PHP 로그 분석을위한 모범 사례 Mar 10, 2025 pm 02:32 PM

    PHP 로깅은 웹 애플리케이션을 모니터링하고 디버깅하고 중요한 이벤트, 오류 및 런타임 동작을 캡처하는 데 필수적입니다. 시스템 성능에 대한 귀중한 통찰력을 제공하고 문제를 식별하며 더 빠른 문제 해결을 지원합니다.

    Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

    Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

    PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

    PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

    Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

    Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> ​​'Hello World', 'github.com'=> ​​[ 'foo'=> 'bar'], 'forge.laravel.com'=>

    Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

    고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

    PHP에서 늦은 정적 결합의 개념을 설명하십시오. PHP에서 늦은 정적 결합의 개념을 설명하십시오. Mar 21, 2025 pm 01:33 PM

    기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

    프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법. 프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법. Mar 28, 2025 pm 05:12 PM

    이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

    See all articles