diffhead/php-dto 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

diffhead/php-dto

最新稳定版本:1.0.1

Composer 安装命令:

composer require diffhead/php-dto

包简介

Simple library that provides suitable data transfer object for PHP applications.

README 文档

README

Simple and lightweight PHP library for representing Data Transfer Objects (DTOs) with property value tracking.

Features

  • Easy to use abstract Dto class for creating data transfer objects
  • Property value tracking with Property wrapper class
  • Support for creating DTOs from arrays with automatic property name conversion
  • Track whether properties are initialized or not
  • Automatic conversion between kebab-case and camelCase
  • Type-safe with PHP 7.4+ and PHP 8.0+

Installation

Install the library via Composer:

composer require diffhead/php-dto

Testing

Run the test suite:

composer test

Requirements

  • PHP 7.4 or higher
  • diffhead/php-interfaces ^1.0
  • jawira/case-converter ^3.6

Quick Start

Create a DTO class by extending the Dto abstract class:

<?php

use Diffhead\PHP\Dto\Dto;
use Diffhead\PHP\Dto\Property;

/**
 * Properties inside the Dto class
 * should be camelCase named and 
 * protected
 */
class UserCreate extends Dto
{
    protected Property $firstName;
    protected Property $lastName;
    protected Property $email;
}

Usage

Creating a DTO from Array

/**
 * But inside the source array you can use
 * camelCase, pascal_case, kebab-case, etc
 */
$data = [
    'first_name' => 'John',
    'lastName' => 'Doe',
    'email' => 'john@example.com'
];

$user = UserCreate::fromArray($data);

Accessing Properties

Access properties using magic methods. Each property returns a Property object that tracks both the value and whether it exists:

/**
 * Get the property object
 */
$firstName = $user->firstName;

/**
 * Check property exists and set
 */
if ($firstName->exists()) {
    echo $firstName->value(); // Output: John
}

Working with Property Objects

The Property class wraps values and tracks their existence:

$property = new \Diffhead\PHP\Dto\Property('1', true);

$property->value();    // Returns: '1'
$property->exists();   // Returns: true
$property->toInt();    // Returns: 1
$property->toFloat();  // Returns: 1.0
$proprety->toBool();   // Returns: true
$property->toArray();  // Returns: ['1']
$property->toString(); // Returns: '1'

$property = new \Diffhead\PHP\Dto\Property(null, false);

$property->value();    // Returns: null
$property->exists();   // Returns: false

Retrieving Values

Get multiple property values at once:

/**
 * Get all properties values
 * 
 * output: ['first_name' => 'John', 'lastName' => 'Doe', 'email' => 'john@example.com', 'age' => null]
 */
$values = $user->getValues(['first_name', 'lastName', 'email', 'age']);

/**
 * Get only existing properties values
 * 
 * output: ['first-name' => 'John', 'last.name' => 'Doe', 'email' => 'john@example.com']
 */
$values = $user->getValues(['first-name', 'last.name', 'email', 'age'], true);

Property Name Conversion

The library automatically handles class property name conversion:

  • dot.case (e.g., first.name) → camelCase (e.g., firstName)
  • kebab-case (e.g., first-name) → camelCase (e.g., firstName)
  • snake_case (e.g., first_name) → camelCase (e.g., firstName)

This makes it easy to work with API responses and form data that might use different naming conventions.

But Diffhead\PHP\Dto\Dto::getValues method returns raw array keys as they was been passed.

License

This project is licensed under the MIT License. See the LICENSE file for details.

统计信息

  • 总下载量: 117
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-12-12