四时宝库

程序员的知识宝库

PHP设计模式之组合模式

组合模式属于结构型模式

概述:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

组合和聚合都描述一个类长期持有其他类的一个或多个实例的情况。

聚合:被包含对象是容器的核心部分,但是他们也可以被其他对象所包含。聚合关系用一条以空心菱形开头的线来说明。

组合:被包含的对象只能被它的容器所引用。当容器被删除时,它也应该被删除。组合关系的菱形是实心的

<?php

面试官:MySQL 到底是 join 性能好,还是 in 一下更快呢?被问懵逼了

来源:https://juejin.cn/post/7169567387527282701

如有侵权,联系删除

PHP 代码中变量前“&amp;”的深度解析 #php #程序

在 PHP 中,当变量前面出现 “&” 符号时,它表示引用,意味着不同的名字可以访问同一个变量内容。这与 C 语言的指针不同,“&” 在 PHP 中是符号表别名。

例如,有以下代码:

$a = "ABC";

$b = &$a;

WEB常见漏洞之反序列化分析与防御

0x01 漏洞概述

序列化:

PHP读取文件内容的五种方式

读取文件内容的五种方式

分享下php读取文件内容的五种方法:好吧,写完后发现文件全部没有关闭。实际应用当中,请注意关闭 fclose($fp);
--

Laravel框架,实现导出Excel功能,同时把链接地址转换成图片

今天,给大家分享一下,如何在laravel框架中,实现导出Excel功能。同时,在导出的Excel中把链接地址转化成图片

需要用到的工具及扩展

  1. laravel版本为5.5,可到官网根据自己的需要下载相应版本
  2. PHP7及以上
  3. excel扩展用的是 maatwebsite/excel,版本为2.1及以上
  4. 安装后的laravel框架目录如下图所示:

彻底搞明白PHP中的include和require

在PHP中,有两种包含外部文件的方式,分别是include和require。他们之间有什么不同呢?

如果文件不存在或发生了错误,require产生E_COMPILE_ERROR级别的错误,程序停止运行。而include只产生警告,脚本会继续执行。

这就是它们最主要的区别,其他方面require基本等同于include。

  • 被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找

不同语言的循环语句的特立独行之处


循环语句一般分为while/for/do-while三种。

  • while是if语句重复执行的优化版,如果没有while,就需要用if和goto组合代替。

浪漫编程丨程序员的520表白代码,你能看懂几个?

说起格子衫、地中海、厚重的黑眼镜框、不懂浪漫且油腻的直男,想必大家的脑海里浮现出来的就是程序员的形象了。但事实上,程序员也可以是可以很浪漫的哦!以下就是w3cschool编程狮小师妹搜集整理程序员520表白代码

Python

都说PHP性能差,但PHP性能真的差吗?

今天本能是想测试一个PDO持久化,会不会带来会话混乱的问题 先贴一下PHP代码, 代码丑了点,但是坚持能run就行,反正就是做个测试。

<?php
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$user = 'root';
$password = 'root';

// 设置 PDO 选项,启用持久化连接
$options = [
    PDO::ATTR_PERSISTENT => true,
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];

try {
    // 创建持久化连接
    $pdo = new PDO($dsn, $user, $password, $options);

    $stmt = $pdo->prepare("INSERT INTO test_last_insert_id (uni) VALUES (:uni);");
    $uni = uniqid('', true);
    $stmt->bindValue(':uni', $uni);
    $aff = $stmt->execute(); //
    if ($aff === false) {
        throw new Exception("insert fail:");
    }
    $id = $pdo->lastInsertId();


    function getExecutedSql($stmt, $params)
    {
        $sql = $stmt->queryString;
        $keys = array();
        $values = array();

        // 替换命名占位符 :key with ?
        $sql = preg_replace('/\:(\w+)/', '?', $sql);

        // 绑定的参数可能包括命名占位符,我们需要将它们转换为匿名占位符
        foreach ($params as $key => $value) {
            $keys[] = '/\?/';
            $values[] = is_string($value) ? "'$value'" : $value;
        }

        // 替换占位符为实际参数
        $sql = preg_replace($keys, $values, $sql, 1, $count);

        return $sql;
    }


    $stmt = $pdo->query("SELECT id FROM test_last_insert_id WHERE uni = '{$uni}'", PDO::FETCH_NUM);
    $row = $stmt->fetch();
    $value = $row[0];
    if ($value != $id) {
        throw new Exception("id is diff");
    }

    echo "success" . PHP_EOL;

} catch (PDOException $e) {
    header('HTTP/1.1 500 Internal Server Error');
    file_put_contents('pdo_perisistent.log', $e->getMessage() . PHP_EOL);
    die('Database connection failed: ' . $e->getMessage());
} catch (Exception $e) {
    header('HTTP/1.1 500 Internal Server Error');
    file_put_contents('pdo_perisistent.log', $e->getMessage() . PHP_EOL);
    die('Exception: ' . $e->getMessage());
}
<< < 1 2 3 4 > >>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接