Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Bcmath Compat

Bcmath Compat Laravel Package

phpseclib/bcmath_compat

BCMath compatibility layer for PHP environments without the bcmath extension. Provides drop-in function replacements used by phpseclib, helping big integer and cryptography features work consistently across shared hosts, minimal installs, and varied PHP builds.

View on GitHub
Deep Wiki
Context7

PHP 5.x-8.x polyfill for bcmath extension

Frequently asked questions about Bcmath Compat
How do I install this bcmath polyfill in a Laravel project?
Add `phpseclib/bcmath_compat` to your `composer.json` under `require` or `require-dev`, then run `composer update`. No additional Laravel configuration is needed—it works via Composer autoloading. For explicit control, use a proxy class like `BCMathCompat::bcadd()` instead of native `bcadd()`.
Will this work with Laravel 8/9/10 and PHP 8.x?
Yes, the package supports PHP 7.4+ and Laravel 8+. It’s fully compatible with PHP 8.x features like named arguments and typed properties. Tested with Laravel’s latest versions, but always verify edge cases in your specific setup.
Does this polyfill slow down my Laravel app significantly?
Yes, pure PHP implementations are ~10-100x slower than native bcmath. Benchmark critical paths (e.g., bulk crypto operations) before using it in production. Cache repeated results (e.g., with Laravel’s cache) to mitigate performance hits.
Can I use this alongside the native bcmath extension?
Yes, but you’ll need a dynamic resolver to switch between them. In a Laravel service provider, bind a singleton that checks `extension_loaded('bcmath')` and returns the native or polyfill implementation accordingly. Avoid autoload conflicts by using explicit namespaces.
How do I test if the polyfill works correctly in my Laravel app?
Compare results against native bcmath for edge cases (e.g., `bcdiv('1', '3', 10)` should equal `0.3333333333`). Use PHPUnit to mock `bc*` calls and verify precision. Test with libraries like `phpseclib` or `paragonie/random_compat` to ensure compatibility.
What’s the best way to integrate this without breaking existing code?
Use a proxy class (e.g., `BCMathCompat::bcadd()`) to avoid namespace collisions. Alternatively, prepend the polyfill’s autoloader to hijack `bc*` calls, but test thoroughly for conflicts with other overrides. Laravel’s service container can abstract the backend cleanly.
Is this polyfill safe for financial calculations in Laravel?
It’s safe for basic operations, but validate precision against native bcmath for critical paths (e.g., currency conversions). The polyfill mimics bcmath’s behavior, but floating-point edge cases (e.g., `bcdiv` rounding) may differ. Test with your specific use case.
Are there alternatives to this polyfill for Laravel?
Yes: Enable the native `bcmath` extension if possible (faster), or use the `gmp` extension as a primary backend with this as a fallback. Libraries like `bcmath.php` (legacy) or `math.php` (for arbitrary precision) are other options, but this polyfill is the most lightweight for Laravel.
How do I handle precision errors when using this in Laravel?
Compare outputs against native bcmath for known edge cases (e.g., `bccomp('0.1', '0.1')` may vary). Log warnings for discrepancies in production. For critical paths, implement a hybrid resolver that falls back to native bcmath if available.
Can I use this polyfill in shared hosting where bcmath is disabled?
Absolutely—this is its primary use case. The polyfill requires no server-side configuration, making it ideal for shared hosting. Just install via Composer, and it will work immediately. Performance will degrade, but it ensures consistency across environments.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle