{"id":19850083,"url":"https://github.com/farzai/support-php","last_synced_at":"2026-05-14T10:38:16.776Z","repository":{"id":171189745,"uuid":"647562886","full_name":"farzai/support-php","owner":"farzai","description":"A collection of useful PHP functions, helpers, and classes for support farzai package.","archived":false,"fork":false,"pushed_at":"2024-04-29T22:03:46.000Z","size":42,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2024-04-29T23:25:06.380Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/farzai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"parsilver"}},"created_at":"2023-05-31T03:41:34.000Z","updated_at":"2024-07-09T03:08:10.369Z","dependencies_parsed_at":"2023-12-25T23:22:26.922Z","dependency_job_id":"5d0b065d-9a18-43c9-ad45-e22ffc165f61","html_url":"https://github.com/farzai/support-php","commit_stats":null,"previous_names":["farzai/support-php"],"tags_count":5,"template":false,"template_full_name":"farzai/package-skeleton-php","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/farzai%2Fsupport-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/farzai%2Fsupport-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/farzai%2Fsupport-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/farzai%2Fsupport-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/farzai","download_url":"https://codeload.github.com/farzai/support-php/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241230819,"owners_count":19931040,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T13:24:16.437Z","updated_at":"2026-05-14T10:38:16.764Z","avatar_url":"https://github.com/farzai.png","language":"PHP","funding_links":["https://github.com/sponsors/parsilver"],"categories":[],"sub_categories":[],"readme":"# Support Package - PHP\n\n[![Latest Version on Packagist](https://img.shields.io/packagist/v/farzai/support.svg?style=flat-square)](https://packagist.org/packages/farzai/support)\n[![Tests](https://img.shields.io/github/actions/workflow/status/farzai/support-php/run-tests.yml?branch=main\u0026label=tests\u0026style=flat-square)](https://github.com/farzai/support-php/actions/workflows/run-tests.yml)\n[![codecov](https://codecov.io/gh/farzai/support-php/branch/main/graph/badge.svg)](https://codecov.io/gh/farzai/support-php)\n[![Total Downloads](https://img.shields.io/packagist/dt/farzai/support.svg?style=flat-square)](https://packagist.org/packages/farzai/support)\n\nA collection of useful PHP helper functions and utilities with full type safety and comprehensive documentation.\n\n## Features\n\n- 🔒 **Fully Typed** - Complete PHP 8.0+ type declarations for enhanced IDE support\n- 📝 **Well Documented** - Comprehensive PHPDoc comments with examples\n- ✅ **Thoroughly Tested** - High test coverage with edge case testing\n- 🔍 **Static Analysis** - PHPStan Level 8 compliant\n- 🎯 **Zero Dependencies** - Only requires Carbon for date/time utilities\n- 🌐 **UTF-8 Safe** - Multi-byte string operations throughout\n\n## Requirements\n\n- PHP 8.0 or higher\n- ext-mbstring\n\n## Installation\n\nYou can install the package via composer:\n\n```bash\ncomposer require farzai/support\n```\n\n## Table of Contents\n\n- [Array Utilities](#array-utilities)\n- [String Utilities](#string-utilities)\n- [Date/Time Utilities](#datetime-utilities)\n- [Helper Functions](#helper-functions)\n\n## Array Utilities\n\nThe `Arr` class provides utilities for working with arrays using dot notation.\n\n### get()\n\nGet an item from an array using dot notation:\n\n```php\nuse Farzai\\Support\\Arr;\n\n$array = [\n    'user' =\u003e [\n        'name' =\u003e 'John Doe',\n        'email' =\u003e 'john@example.com',\n        'address' =\u003e [\n            'city' =\u003e 'New York'\n        ]\n    ]\n];\n\n// Get nested value\nArr::get($array, 'user.name'); // Returns: 'John Doe'\nArr::get($array, 'user.address.city'); // Returns: 'New York'\n\n// With default value\nArr::get($array, 'user.phone', 'N/A'); // Returns: 'N/A'\n\n// Get entire array\nArr::get($array, null); // Returns: entire $array\n```\n\n### exists()\n\nCheck if a key exists in an array using dot notation:\n\n```php\nuse Farzai\\Support\\Arr;\n\n$array = ['user' =\u003e ['name' =\u003e 'John']];\n\nArr::exists($array, 'user.name'); // Returns: true\nArr::exists($array, 'user.email'); // Returns: false\n```\n\n### accessible()\n\nCheck if a value is array accessible:\n\n```php\nuse Farzai\\Support\\Arr;\n\nArr::accessible(['foo' =\u003e 'bar']); // Returns: true\nArr::accessible(new ArrayObject()); // Returns: true\nArr::accessible('string'); // Returns: false\n```\n\n## String Utilities\n\nThe `Str` class provides a rich set of string manipulation methods.\n\n### Case Conversion\n\n```php\nuse Farzai\\Support\\Str;\n\n// camelCase\nStr::camel('foo_bar'); // Returns: 'fooBar'\nStr::camel('foo-bar'); // Returns: 'fooBar'\n\n// StudlyCase (PascalCase)\nStr::studly('foo_bar'); // Returns: 'FooBar'\n\n// snake_case\nStr::snake('fooBar'); // Returns: 'foo_bar'\nStr::snake('FooBar', '-'); // Returns: 'foo-bar'\n\n// lowercase\nStr::lower('FOO BAR'); // Returns: 'foo bar'\n```\n\n### Case Checking\n\n```php\nuse Farzai\\Support\\Str;\n\nStr::isSnakeCase('foo_bar'); // Returns: true\nStr::isCamelCase('fooBar'); // Returns: true\nStr::isStudlyCase('FooBar'); // Returns: true\n```\n\n### String Operations\n\n```php\nuse Farzai\\Support\\Str;\n\n// Replace\nStr::replace('foo', 'bar', 'foo baz'); // Returns: 'bar baz'\n\n// Check if starts with\nStr::startsWith('foobar', 'foo'); // Returns: true\nStr::startsWith('foobar', ['bar', 'foo']); // Returns: true\n\n// Check if ends with\nStr::endsWith('foobar', 'bar'); // Returns: true\n\n// Check if contains\nStr::contains('foobar', 'oob'); // Returns: true\nStr::contains('foobar', ['baz', 'bar']); // Returns: true\n\n// Length (UTF-8 safe)\nStr::length('foo'); // Returns: 3\nStr::length('ñoño'); // Returns: 4\n\n// Substring (UTF-8 safe)\nStr::substr('foobar', 0, 3); // Returns: 'foo'\nStr::substr('foobar', 3); // Returns: 'bar'\n```\n\n### Random String Generation\n\nAll random methods use cryptographically secure randomness:\n\n```php\nuse Farzai\\Support\\Str;\n\n// Random alphanumeric (base64-like)\nStr::random(16); // Returns: 'a3K7mN9pQ1xY2zB5'\n\n// Random ASCII\nStr::randomAscii(16);\n\n// Random numeric only\nStr::randomNumeric(6); // Returns: '472891'\n\n// Random alphanumeric (A-Z, a-z, 0-9)\nStr::randomAlphanumeric(12); // Returns: 'aB3xY9mK2nP7'\n\n// Random with custom character set\nStr::randomString(8, 'ABCD123'); // Returns: 'A2B1C3D2'\n\n// Random with special characters (for passwords)\nStr::randomStringWithSpecialCharacter(16); // Returns: 'aB3!xY@9#mK2$pQ5'\n```\n\n## Date/Time Utilities\n\nThe `Carbon` class extends the popular Carbon library with additional convenience methods.\n\n### Creating Instances\n\n```php\nuse Farzai\\Support\\Carbon;\nuse function Farzai\\Support\\now;\n\n// Get current date/time\n$now = now();\n// or\n$now = Carbon::now();\n\n// With timezone\n$now = now('America/New_York');\n$now = Carbon::now('UTC');\n\n// From timestamp\n$date = Carbon::fromTimestamp(1609459200);\n```\n\n### Date Checking\n\n```php\nuse Farzai\\Support\\Carbon;\n\n$today = Carbon::now();\n$yesterday = Carbon::yesterday();\n$tomorrow = Carbon::tomorrow();\n\n// Check if today\n$today-\u003eisToday(); // Returns: true\n$yesterday-\u003eisToday(); // Returns: false\n\n// Check if past\n$yesterday-\u003eisPast(); // Returns: true\n$tomorrow-\u003eisPast(); // Returns: false\n\n// Check if future\n$tomorrow-\u003eisFuture(); // Returns: true\n$yesterday-\u003eisFuture(); // Returns: false\n\n// Check if between dates\n$today-\u003eisBetweenDates($yesterday, $tomorrow); // Returns: true\n```\n\n### Date Formatting\n\n```php\nuse Farzai\\Support\\Carbon;\n\n$date = Carbon::now();\n\n// Format as date string\n$date-\u003etoDateString(); // Returns: '2024-03-18'\n\n// Format as time string\n$date-\u003etoTimeString(); // Returns: '14:30:45'\n\n// Format as datetime string\n$date-\u003etoDateTimeString(); // Returns: '2024-03-18 14:30:45'\n```\n\n### Day Boundaries\n\n```php\nuse Farzai\\Support\\Carbon;\n\n$date = Carbon::now();\n\n// Start of day\n$start = $date-\u003estartOfDay(); // Returns: today at 00:00:00\n\n// End of day\n$end = $date-\u003eendOfDay(); // Returns: today at 23:59:59\n```\n\n### Date Differences\n\n```php\nuse Farzai\\Support\\Carbon;\n\n$today = Carbon::now();\n$yesterday = Carbon::yesterday();\n\n// Absolute difference in days\n$today-\u003ediffInDaysAbsolute($yesterday); // Returns: 1\n```\n\n## Helper Functions\n\nGlobal helper functions in the `Farzai\\Support` namespace.\n\n### tap()\n\nExecute a callback on a value and return the value:\n\n```php\nuse function Farzai\\Support\\tap;\n\n// With callback\n$user = tap($user, function ($u) {\n    $u-\u003eupdate(['last_login' =\u003e now()]);\n});\n// Returns $user after updating\n\n// Without callback (higher-order proxy)\n$user = tap($user)\n    -\u003eupdate(['last_login' =\u003e now()])\n    -\u003esave();\n// Chains methods but returns $user\n```\n\n### now()\n\nGet the current date/time:\n\n```php\nuse function Farzai\\Support\\now;\n\n$current = now(); // Returns: Carbon instance\n$ny = now('America/New_York'); // Returns: Carbon instance in NY timezone\n```\n\n### class_basename()\n\nGet the class name without namespace:\n\n```php\nuse function Farzai\\Support\\class_basename;\n\nclass_basename('App\\Models\\User'); // Returns: 'User'\nclass_basename(new \\App\\Models\\User); // Returns: 'User'\n```\n\n## Development\n\n### Running Tests\n\n```php\ncomposer test\n```\n\n### Running Tests with Coverage\n\n```bash\ncomposer test-coverage\n```\n\n### Code Formatting\n\n```bash\ncomposer format\n```\n\n### Static Analysis\n\n```bash\ncomposer analyze\n```\n\n### Run All Checks\n\n```bash\ncomposer check\n```\n\n## Changelog\n\nPlease see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.\n\n## Contributing\n\nPlease see [CONTRIBUTING](https://github.com/farzai/.github/blob/main/CONTRIBUTING.md) for details.\n\n## Security Vulnerabilities\n\nPlease review [our security policy](../../security/policy) on how to report security vulnerabilities.\n\n## Credits\n\n- [parsilver](https://github.com/parsilver)\n- [All Contributors](../../contributors)\n\n## License\n\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffarzai%2Fsupport-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffarzai%2Fsupport-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffarzai%2Fsupport-php/lists"}