WordPress 开发知识

以下是一篇详细的 WordPress 入门到精通指南,旨在帮助新手从零开始,逐步理解和掌握 WordPress 的使用和开发。

目录

  1. 简介
  2. 初步设置
    • 购买域名和托管
    • 安装 WordPress
  3. 基本操作
    • 登录和仪表盘简介
    • 创建和管理内容
  4. 主题和外观
    • 选择和安装主题
    • 自定义主题
  5. 插件
    • 安装和管理插件
    • 推荐插件
  6. 用户管理和角色
  7. 安全性和备份
  8. 性能优化
  9. 高级开发
    • 创建自定义主题
    • 开发插件
  10. 部署和维护

简介

WordPress 是一个开源的内容管理系统 (CMS),广泛用于创建博客、企业网站、电子商务网站等。它以其易用性和灵活性著称,支持丰富的主题和插件扩展,能够满足各种网站需求。

初步设置

购买域名和托管

  1. 选择域名:选择一个简短易记的域名,并在域名注册商(如 GoDaddy、Namecheap)购买。
  2. 选择托管服务:选择一个可靠的托管服务提供商(如 Bluehost、SiteGround、WP Engine),并购买适合你需求的托管计划。

安装 WordPress

  1. 通过托管服务一键安装:大多数托管服务提供商提供一键安装 WordPress 的选项。
  2. 手动安装
    • 下载 WordPress 安装包:WordPress.org
    • 使用 FTP 客户端(如 FileZilla)上传文件到服务器。
    • 创建数据库和用户。
    • 运行安装脚本,完成设置。

基本操作

登录和仪表盘简介

  • 通过 http://yourdomain.com/wp-admin 访问登录页面。
  • 登录后,进入仪表盘(Dashboard),这里是管理网站的中心。

创建和管理内容

  • 文章 (Posts) :适合博客内容。
    • 创建新文章:文章 -> 写文章
    • 分类和标签管理:文章 -> 分类标签
  • 页面 (Pages) :适合静态内容,如"关于我们"、"联系我们"。
    • 创建新页面:页面 -> 新建页面

主题和外观

选择和安装主题

  • 安装免费主题
    • 外观 -> 主题 -> 添加
    • 浏览并安装喜欢的主题
  • 安装付费主题
    • 从第三方市场(如 ThemeForest)购买并下载主题包。
    • 上传主题包:外观 -> 主题 -> 添加 -> 上传主题

自定义主题

  • 使用 WordPress 自带的自定义工具:外观 -> 自定义
  • 调整站点标题、颜色、菜单、部件等。

插件

安装和管理插件

  • 安装插件
    • 插件 -> 安装插件
    • 搜索、安装并激活所需插件
  • 管理插件
    • 插件 -> 已安装的插件
    • 激活、停用或删除插件

推荐插件

  1. Yoast SEO:优化网站 SEO。
  2. WooCommerce:创建电子商务网站。
  3. Contact Form 7:创建联系表单。
  4. Akismet:防止垃圾评论。
  5. WP Super Cache:提高网站速度。

用户管理和角色

  • 添加新用户用户 -> 新建用户
  • 用户角色
    • 管理员 (Administrator)
    • 编辑 (Editor)
    • 作者 (Author)
    • 投稿者 (Contributor)
    • 订阅者 (Subscriber)

安全性和备份

  • 安全插件
    • Wordfence Security
    • iThemes Security

一些常见的wordpress技术处理:

一. 在开发 WordPress 插件时,如何有效地使用 WordPress 钩子(Actions 和 Filters)来扩展功能?

在开发 WordPress 插件时,熟练使用 WordPress 钩子(Actions 和 Filters)是扩展功能的关键。钩子允许你在特定的点上插入自定义代码,而不需要修改核心文件。以下是如何有效使用这些钩子的方法:

1. 理解 WordPress 钩子的基本概念

  • Actions:允许你在 WordPress 执行一个特定操作时运行你的代码。例如,在页面加载完成后、文章发布时等。
  • Filters:允许你在 WordPress 数据输出之前对数据进行修改。例如,修改文章内容、标题等。

2. 使用 Actions 扩展功能

Actions 通过 add_action 函数来定义。以下是一个基本示例:

// 在 WordPress 初始化时执行自定义函数
add_action('init', 'my_custom_init_function');

function my_custom_init_function() {
    // 你的自定义代码
    // 例如,注册一个自定义文章类型
    register_post_type('my_custom_post_type', [
        'label' => 'My Custom Post Type',
        'public' => true,
        'supports' => ['title', 'editor', 'thumbnail'],
    ]);
}

3. 使用 Filters 修改数据

Filters 通过 add_filter 函数来定义。以下是一个基本示例:

// 修改文章标题
add_filter('the_title', 'my_custom_title_filter');

function my_custom_title_filter($title) {
    // 你的自定义代码
    // 例如,添加前缀到文章标题
    return 'Prefix: ' . $title;
}

4. 查找适合的钩子

WordPress 提供了大量的钩子,基本上覆盖了所有可能的操作和数据处理。你可以在 WordPress Codex 或者 WordPress Developer Handbook 中查找你需要的钩子。

5. 创建自定义钩子

在你的插件中创建自定义钩子,可以让其他开发者扩展你的插件功能。例如:

// 定义一个自定义 action
do_action('my_custom_action');

// 在其他地方钩住这个自定义 action
add_action('my_custom_action', 'my_custom_action_handler');

function my_custom_action_handler() {
    // 处理函数逻辑
}

6. 优化钩子的使用

  • 避免重复代码:将钩子的处理逻辑封装在函数中,并在适当的地方调用。

  • 优先级add_actionadd_filter 有一个可选的优先级参数,默认为 10。通过调整优先级,可以控制钩子执行的顺序。

    // 优先级为 15 的 action
    add_action('init', 'my_custom_init_function', 15);

7. 实战示例

假设你要在每篇文章的内容后添加一个广告代码,可以使用 the_content 过滤器:

add_filter('the_content', 'add_ad_to_content');

function add_ad_to_content($content) {
    if (is_single()) {
        // 你的广告代码
        $ad_code = '<div class="my-ad">This is an ad.</div>';
        $content .= $ad_code;
    }
    return $content;
}

结论

通过有效地使用 WordPress 钩子,可以在不修改核心代码的情况下扩展 WordPress 的功能。关键在于理解 Actions 和 Filters 的机制,找到合适的钩子,并编写简洁且有效的处理函数。持续学习和实践能够帮助你更好地掌握和应用这些技术。

二. 开发 WordPress 插件时的常见最佳实践

遵循这些可以确保你的插件代码质量高、性能好、易于维护和扩展。以下是一些常见的最佳实践:

1. 遵循编码标准

  • WordPress Coding Standards :遵循 WordPress PHP Coding Standards。这包括文件组织、命名约定、代码格式等。
  • 代码注释:使用清晰的注释和文档,使代码易于理解和维护。

2. 避免命名冲突

  • 前缀 :为函数、类、变量等添加唯一前缀,避免与其他插件或主题冲突。例如,使用 myplugin_ 作为前缀。
  • 命名空间:在 PHP 5.3 及以上版本中使用命名空间来组织代码,进一步减少冲突的可能。

3. 使用适当的文件结构

  • 文件组织:将不同功能的代码分离到不同的文件中。例如,将短代码、钩子、设置页面等各自放在独立的文件中。

  • 主文件:在插件的主文件中包含插件的元数据,并引导其他文件。

    /*
    Plugin Name: My Custom Plugin
    Description: This is a custom plugin.
    Version: 1.0
    Author: Your Name
    */

    // 包含其他文件
    include_once plugin_dir_path(FILE) . 'includes/my-custom-functions.php';
    include_once plugin_dir_path(FILE) . 'includes/my-custom-hooks.php';

4. 使用钩子

  • Actions 和 Filters:尽量使用 WordPress 提供的 Actions 和 Filters 来扩展功能,而不是直接修改 WordPress 核心。
  • 自定义钩子:为你的插件添加自定义钩子,使其更具可扩展性。

5. 安全性

  • 数据验证和消毒:对所有输入数据进行验证和消毒,防止 XSS 和 SQL 注入攻击。

    // 验证和消毒示例
    sanitized_input = sanitize_text_field(_POST['user_input']);

  • 权限检查:在执行敏感操作前检查用户权限。

    // 权限检查示例
    if (current_user_can('manage_options')) {
    // 执行管理员操作
    }

6. 使用 WordPress 提供的 API

  • Settings API :使用 Settings API 创建和管理插件的设置页面。
  • Options API :使用 Options API 存储和检索插件设置。
  • Shortcode API :使用 Shortcode API 创建短代码。

7. 本地化和国际化

  • 翻译准备 :确保插件的所有文本都可以被翻译。使用 __()_e() 函数包裹字符串。

    // 本地化示例
    _e('Hello, World!', 'my-plugin-textdomain');

  • 加载文本域:在插件初始化时加载文本域。

    // 加载文本域
    function myplugin_load_textdomain() {
    load_plugin_textdomain('my-plugin-textdomain', false, basename(dirname(FILE)) . '/languages');
    }
    add_action('plugins_loaded', 'myplugin_load_textdomain');

8. 优化性能

  • 尽量减少数据库查询:缓存结果,减少不必要的数据库查询。
  • 使用合适的数据结构:选择最适合的数据库表和数据存储方式,提高查询效率。

9. 提供卸载功能

  • 清理数据:在插件卸载时清理所有设置和数据,保持数据库干净。

    // 插件卸载钩子
    register_uninstall_hook(FILE, 'myplugin_uninstall');

    function myplugin_uninstall() {
    // 删除插件设置
    delete_option('myplugin_settings');
    }

10. 测试和调试

  • 测试环境:在开发和测试插件时,使用本地或测试服务器,而不是直接在生产环境中进行。
  • 调试工具 :使用调试工具,如 WP_DEBUGQuery Monitor 插件等,帮助发现和解决问题。

三.分享一些在 WordPress 插件开发过程中遇到的常见挑战及解决方案

开发 WordPress 插件时可能会遇到各种挑战。以下是一些常见挑战及其解决方案:

1. 命名冲突

挑战:插件中的函数、类或变量名称可能与其他插件或主题中的名称冲突,导致功能异常或崩溃。

解决方案

  • 使用前缀:为所有函数、类和变量添加唯一前缀。

    function myplugin_custom_function() {
    // Function code here
    }

  • 使用命名空间(适用于 PHP 5.3 及以上版本):

    namespace MyPlugin;

    class CustomClass {
    // Class code here
    }

2. 数据验证和安全

挑战:处理用户输入时,可能会引入安全漏洞,如 XSS、SQL 注入等。

解决方案

  • 验证和消毒:对所有用户输入的数据进行验证和消毒。

    sanitized_input = sanitize_text_field(_POST['user_input']);

  • 使用准备好的语句 :使用 WordPress 提供的数据库接口(如 $wpdb)防止 SQL 注入。

    global $wpdb;
    $wpdb->insert(
    wpdb->prefix . 'my_table', array( 'column_name' => sanitize_text_field(_POST['column_value']),
    )
    );

3. 权限管理

挑战:确保只有具备适当权限的用户可以执行某些操作。

解决方案

  • 检查用户权限:在执行敏感操作前检查用户权限。

    if (current_user_can('manage_options')) {
    // Perform admin-specific task
    }

4. 兼容性问题

挑战:插件可能与其他插件、主题或 WordPress 版本不兼容。

解决方案

  • 版本检测:在插件激活时检测 WordPress 版本和其他依赖项。

    function myplugin_activate() {
    global wp_version; if (version_compare(wp_version, '5.0', '<')) {
    deactivate_plugins(plugin_basename(FILE));
    wp_die('This plugin requires WordPress version 5.0 or higher.');
    }
    }
    register_activation_hook(FILE, 'myplugin_activate');

  • 使用钩子和过滤器:尽量通过钩子和过滤器与其他代码交互,而不是直接修改核心文件。

5. 性能优化

挑战:插件可能会导致网站加载变慢或消耗过多服务器资源。

解决方案

  • 缓存:缓存频繁使用的结果,减少数据库查询次数。

    $cached_data = get_transient('myplugin_cached_data');
    if (false === $cached_data) {
    // Perform database query or other time-consuming operation
    $cached_data = 'Expensive Data';
    set_transient('myplugin_cached_data', $cached_data, 12 * HOUR_IN_SECONDS);
    }

  • 优化查询:确保数据库查询高效,使用适当的索引和查询优化技术。

6. 本地化和国际化

挑战:确保插件支持多语言,便于国际化。

解决方案

  • 使用翻译函数 :所有输出到用户界面的文本都应使用 __()_e() 函数。

    _e('Hello, World!', 'my-plugin-textdomain');

  • 加载文本域:在插件初始化时加载文本域。

    function myplugin_load_textdomain() {
    load_plugin_textdomain('my-plugin-textdomain', false, basename(dirname(FILE)) . '/languages');
    }
    add_action('plugins_loaded', 'myplugin_load_textdomain');

7. 提供良好的用户界面

挑战:确保插件的管理界面用户友好且易于使用。

解决方案

  • 使用 WordPress UI 元素:利用 WordPress 提供的 UI 元素和样式,使界面和 WordPress 后台一致。

    function myplugin_settings_page() {
    ?>


    <?php _e('My Plugin Settings', 'my-plugin-textdomain'); ?>


    <form method="post" action="options.php">
    <?php settings_fields('myplugin_options_group'); do_settings_sections('myplugin'); submit_button(); ?>
    </form>

    <?php
    }

  • 使用 Settings API:创建和管理设置页面。

    function myplugin_register_settings() {
    register_setting('myplugin_options_group', 'myplugin_option

四.插件开发过程中遇到任何性能问题的经验?如何优化插件性能?

优化插件性能不仅能提高用户体验,还能减少服务器负载。

以下是一些遇到的性能问题及其优化方案:

1. 高频数据库查询

问题:频繁且不必要的数据库查询会导致页面加载变慢,增加服务器负载。

解决方案

  • 数据库查询优化:优化 SQL 查询,确保只查询必要的数据,并使用适当的索引。

    global $wpdb;
    $results = wpdb->get_results(" SELECT id, name FROM {wpdb->prefix}my_table
    WHERE status = 'active'
    ORDER BY created_at DESC
    LIMIT 10
    ");

  • 缓存 :使用 WordPress 内置的缓存机制(如 transients)或外部缓存插件减少数据库查询次数。

    function myplugin_get_cached_data() {
    $cached_data = get_transient('myplugin_cached_data');
    if (false === $cached_data) {
    // Expensive operation
    global $wpdb;
    $cached_data = wpdb->get_results("SELECT * FROM {wpdb->prefix}my_table");
    set_transient('myplugin_cached_data', $cached_data, 12 * HOUR_IN_SECONDS);
    }
    return $cached_data;
    }

2. 大量数据处理

问题:在短时间内处理大量数据会导致服务器负载过高,甚至导致超时。

解决方案

  • 分页和分段处理:将大数据处理任务分成小段批量处理。

    function myplugin_process_data_in_batches($batch_size = 100) {
    global $wpdb;
    $offset = 0;
    $total = wpdb->get_var("SELECT COUNT(*) FROM {wpdb->prefix}my_table");

      while ($offset < $total) {
          $results = $wpdb->get_results($wpdb->prepare("
              SELECT * FROM {$wpdb->prefix}my_table
              LIMIT %d OFFSET %d
          ", $batch_size, $offset));
    
          foreach ($results as $row) {
              // Process each row
          }
    
          $offset += $batch_size;
      }
    

    }

3. 不必要的资源加载

问题:在前端页面加载不必要的脚本和样式会增加页面加载时间。

解决方案

  • 条件加载资源:只在必要时加载插件的资源文件。

    function myplugin_enqueue_scripts() {
    if (is_page('special-page')) {
    wp_enqueue_style('myplugin-style', plugins_url('css/style.css', FILE));
    wp_enqueue_script('myplugin-script', plugins_url('js/script.js', FILE), array('jquery'), null, true);
    }
    }
    add_action('wp_enqueue_scripts', 'myplugin_enqueue_scripts');

4. 后台任务处理

问题:在前端页面请求中处理耗时任务会导致页面加载缓慢。

解决方案

  • 使用 WP Cron:将耗时任务移至后台处理,避免影响前端性能。

    // Schedule a cron event
    if (!wp_next_scheduled('myplugin_cron_event')) {
    wp_schedule_event(time(), 'hourly', 'myplugin_cron_event');
    }

    // Hook into the cron event
    add_action('myplugin_cron_event', 'myplugin_cron_task');

    function myplugin_cron_task() {
    // Perform the task
    }

5. 高效使用 WordPress API

问题:忽略或错误使用 WordPress API 可能导致性能问题。

解决方案

  • 使用适当的 API:利用 WordPress 提供的 API,如 Transients API、Options API、WP REST API 等,确保高效和安全的操作。

    // 使用 Transients API 缓存数据
    function myplugin_get_data() {
    $data = get_transient('myplugin_data');
    if (false === $data) {
    // Fetch fresh data
    $data = 'Expensive Data';
    set_transient('myplugin_data', $data, 12 * HOUR_IN_SECONDS);
    }
    return $data;
    }

6. 减少插件冲突

问题:多个插件同时运行可能会引起性能问题和冲突。

解决方案

  • 前缀和命名空间:为插件的所有函数、类、变量添加唯一前缀或使用命名空间,避免冲突。
  • 避免全局变量:尽量避免使用全局变量,改用类属性或函数参数。

7. 监控

8. 使用对象缓存

问题:每次请求都重新计算数据或查询数据库会影响性能。

解决方案

  • 对象缓存:利用 WordPress 的对象缓存机制,确保数据在同一个请求中不会被重复计算或查询。

    function myplugin_get_expensive_data() {
    global $wpdb;

      $cache_key = 'myplugin_expensive_data';
      $data = wp_cache_get($cache_key);
    
      if (false === $data) {
          // Perform the expensive operation
          $data = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}my_table");
          wp_cache_set($cache_key, $data);
      }
    
      return $data;
    

    }

9. 选择合适的数据存储方式

问题:不正确的数据存储方式可能导致性能问题。

解决方案

  • 选择合适的数据存储方式:根据需求选择合适的数据存储方式。例如,使用 WordPress 的 Options API 存储简单设置,使用自定义数据库表存储大量或复杂的数据。

    // 使用 Options API 存储简单设置
    update_option('myplugin_option', $value);

    // 使用自定义数据库表存储复杂数据
    global $wpdb;
    $wpdb->insert(
    $wpdb->prefix . 'my_custom_table',
    array(
    'column1' => $value1,
    'column2' => $value2,
    )
    );

10. 高效处理 AJAX 请求

问题:过多的 AJAX 请求会影响服务器性能。

解决方案

  • 优化 AJAX 请求:减少不必要的 AJAX 请求,合并请求,确保服务器能高效处理。

    // 注册 AJAX 处理函数
    add_action('wp_ajax_myplugin_action', 'myplugin_ajax_handler');
    add_action('wp_ajax_nopriv_myplugin_action', 'myplugin_ajax_handler');

    function myplugin_ajax_handler() {
    // 检查权限和验证
    check_ajax_referer('myplugin_nonce', 'nonce');

      // 处理请求
      $response = array('message' => 'Success');
      wp_send_json_success($response);
    

    }

11. 避免全局变量和函数

问题:全局变量和函数可能导致命名冲突和性能问题。

解决方案

  • 使用类和命名空间:将代码组织到类和命名空间中,避免全局命名空间污染。

    namespace MyPlugin;

    class Main {
    public function __construct() {
    // 初始化代码
    }

      public function run() {
          // 运行插件
      }
    

    }

    $plugin = new Main();
    $plugin->run();

12. 使用异步任务处理

问题:长时间运行的任务会导致页面加载缓慢或超时。

解决方案

  • 异步处理:使用后台或异步处理任务,避免影响用户体验。

    // 使用 WP Background Processing 库
    require_once 'path/to/wp-background-processing.php';

    class MyPlugin_Process extends WP_Background_Process {
    protected $action = 'myplugin_process';

      protected function task($item) {
          // 执行单个任务
          return false; // Return false to indicate the task is complete
      }
    

    }

    $process = new MyPlugin_Process();
    process->push_to_queue(item)->save()->dispatch();

13. 减少 HTTP 请求

过多的 HTTP 请求会增加页面加载时间。

解决方案

  • 合并和最小化资源:合并和最小化 CSS 和 JavaScript 文件,减少 HTTP 请求数量。

    function myplugin_enqueue_scripts() {
    wp_enqueue_style('myplugin-style', plugins_url('css/style.min.css', FILE));
    wp_enqueue_script('myplugin-script', plugins_url('js/script.min.js', FILE), array('jquery'), null, true);
    }
    add_action('wp_enqueue_scripts', 'myplugin_enqueue_scripts');

14. 使用高效的加载机制

加载不必要的资源会影响性能。

解决方案

  • 延迟加载和条件加载:只在需要时加载资源,提高页面加载速度。

    function myplugin_enqueue_scripts() {
    if (is_page('specific-page')) {
    wp_enqueue_style('myplugin-style', plugins_url('css/style.css', FILE));
    wp_enqueue_script('myplugin-script', plugins_url('js/script.js', FILE), array('jquery'), null, true);
    }
    }
    add

WordPress 插件的版本更新和发布流程

1. 使用版本控制系统

建议:使用 Git 等版本控制系统来管理代码。

  • 版本控制系统:使用 Git 来管理代码的不同版本,跟踪更改和协作开发。

  • 远程仓库:使用 GitHub、GitLab 或 Bitbucket 来存储代码,并便于协作和代码审查。

    初始化 Git 仓库

    git init

    添加远程仓库

    git remote add origin https://github.com/yourusername/your-plugin.git

    提交更改

    git add .
    git commit -m "Initial commit"

    推送到远程仓库

    git push origin master

2. 遵循语义化版本号

遵循语义化版本号(Semantic Versioning),以便清晰地传达版本变化的影响。

  • 语义化版本号
    • 主版本号 (Major): 重大变更,可能不向后兼容。

    • 次版本号 (Minor): 新功能,向后兼容。

    • 修订号 (Patch): 小修复,向后兼容。

      MAJOR.MINOR.PATCH

3. 自动化构建和测试

使用自动化工具来构建和测试插件。

  • 构建工具:使用 Grunt、Gulp 或 Webpack 自动化构建任务,如代码压缩、CSS 预处理等。

  • 持续集成:使用 Travis CI、GitHub Actions 或 GitLab CI 自动化测试和部署流程。

    GitHub Actions 示例

    name: CI

    on:
    push:
    branches: [ "main" ]
    pull_request:
    branches: [ "main" ]

    jobs:
    build:
    runs-on: ubuntu-latest

      steps:
      - uses: actions/checkout@v2
      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'
      - name: Install dependencies
        run: composer install
      - name: Run tests
        run: vendor/bin/phpunit
    

4. 更新日志和发布说明

维护详细的更新日志(Changelog),记录每个版本的更改内容。

  • Changelog 文件 :在项目根目录下创建 CHANGELOG.md 文件,记录每次发布的更改内容。

    Changelog

    [1.2.0] - 2024-06-11

    Added

    • 新增了一个功能

    Fixed

    • 修复了一个 bug

    [1.1.1] - 2024-05-01

    Fixed

    • 修复了一个重大安全漏洞

5. 版本发布流程

定义清晰的版本发布流程,确保每次发布的质量。

  • 开发分支和发布分支 :使用 Git 分支策略,如 main 分支用于发布,develop 分支用于开发。

  • 发布标签:在每次发布时创建 Git 标签。

    创建发布标签

    git tag -a v1.2.0 -m "Release version 1.2.0"
    git push origin v1.2.0

6. 管理插件目录

利用 WordPress 插件目录发布和更新插件。

  • SVN 仓库:如果你在 WordPress 插件目录发布插件,需要使用 SVN 来管理。

    检出 SVN 仓库

    svn co https://plugins.svn.wordpress.org/your-plugin-name/

    添加新版本

    svn add trunk/* --force

    提交更改

    svn commit -m "Release version 1.2.0"

7. 用户反馈和支持

收集用户反馈,及时修复问题和发布更新。

  • 支持渠道:提供明确的支持渠道,如支持论坛、电子邮件或 GitHub Issues。
  • 反馈机制:利用插件内的反馈机制,收集用户的意见和建议。

8. 文档和教程

提供详细的文档和教程,帮助用户理解和使用插件。

  • README 文件 :在项目根目录下创建 README.md 文件,提供安装、使用
相关推荐
qq_17448285751 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
黑客Ash1 小时前
【D01】网络安全概论
网络·安全·web安全·php
->yjy1 小时前
计算机网络(第一章)
网络·计算机网络·php
锅包肉的九珍2 小时前
Scala的Array数组
开发语言·后端·scala
心仪悦悦2 小时前
Scala的Array(2)
开发语言·后端·scala
2401_882727572 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架
心仪悦悦2 小时前
Scala中的集合复习(1)
开发语言·后端·scala
阳光帅气男孩3 小时前
PhpSpreadsheet导出图片
php
代码小鑫3 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
真心喜欢你吖3 小时前
SpringBoot与MongoDB深度整合及应用案例
java·spring boot·后端·mongodb·spring