Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Sep 4, 2025

The flattenDictionary method in ODataRequest.php was causing a TypeError in PHP 8 when processing arrays. The issue occurred because method_exists() was being called on $arrayValue without first checking if it was a valid type (string or object).

In PHP 8, method_exists() strictly requires the first parameter to be either a string (class name) or an object. When $arrayValue is an array, integer, float, boolean, or null, PHP 8 throws a TypeError:

TypeError: method_exists(): Argument #1 ($object_or_class) must be of type object|string, array given

Fix Applied:

Added a type check before calling method_exists() to ensure $arrayValue is either a string or an object:

// Before (problematic)
if (method_exists($arrayValue, 'getProperties')) {

// After (fixed)
if ((is_string($arrayValue) || is_object($arrayValue)) && method_exists($arrayValue, 'getProperties')) {

This change:

  • ✅ Prevents TypeError when $arrayValue is an array, integer, float, boolean, or null
  • ✅ Preserves all existing functionality for valid object/string types
  • ✅ Maintains backward compatibility with older PHP versions
  • ✅ Uses short-circuit evaluation for optimal performance

Fixes #124.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/a1ONaA /usr/bin/composer install (http block)
  • https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/a1ONaA /usr/bin/composer install (http block)
  • https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/1kzk2Q /usr/bin/composer install --no-dev (http block)
  • https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/a1ONaA /usr/bin/composer install (http block)
  • https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/1kzk2Q /usr/bin/composer install --no-dev (http block)
  • https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/1kzk2Q /usr/bin/composer install --no-dev (http block)
  • https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/1kzk2Q /usr/bin/composer install --no-dev (http block)
  • https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/1kzk2Q /usr/bin/composer install --no-dev (http block)
  • https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/1kzk2Q /usr/bin/composer install --no-dev (http block)
  • https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/1kzk2Q /usr/bin/composer install --no-dev (http block)
  • https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d
    • Triggering command: /usr/bin/php8.3 -n -c /tmp/1kzk2Q /usr/bin/composer install --no-dev (http block)

If you need me to access, download, or install something from one of these locations, you can either:


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI changed the title [WIP] flattenDictionary causes a type error in PHP 8 by calling method_exists without checking type of first parameter Fix PHP 8 TypeError in flattenDictionary by adding type check before method_exists Sep 4, 2025
Copilot AI requested a review from anderly September 4, 2025 04:21
@anderly anderly marked this pull request as ready for review September 4, 2025 04:39
Copy link
Member

@anderly anderly left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@anderly anderly merged commit 7dc002f into master Sep 4, 2025
18 checks passed
@anderly anderly deleted the copilot/fix-124 branch September 4, 2025 05:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

flattenDictionary causes a type error in PHP 8 by calling method_exists without checking type of first parameter

2 participants