# give/4.16.9/vendor/stripe/stripe-php/lib/Service/AbstractServiceFactory.php

GiveWP – Donation Plugin and Fundraising Platform, version 4.16.9. 60 lines.

- Page: https://pluginprobe.com/plugins/give/4.16.9/code/vendor/stripe/stripe-php/lib/Service/AbstractServiceFactory.php
- Raw: https://pluginprobe.com/plugins/give/4.16.9/raw/vendor/stripe/stripe-php/lib/Service/AbstractServiceFactory.php
- Modified: 2021-09-27T12:30:32+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/give/4.16.9/code/vendor/stripe/stripe-php/lib/Service/AbstractServiceFactory.php#L10-L20`.

```php
<?php

namespace Stripe\Service;

/**
 * Abstract base class for all service factories used to expose service
 * instances through {@link \Stripe\StripeClient}.
 *
 * Service factories serve two purposes:
 *
 * 1. Expose properties for all services through the `__get()` magic method.
 * 2. Lazily initialize each service instance the first time the property for
 *    a given service is used.
 */
abstract class AbstractServiceFactory
{
    /** @var \Stripe\StripeClientInterface */
    private $client;

    /** @var array<string, AbstractService|AbstractServiceFactory> */
    private $services;

    /**
     * @param \Stripe\StripeClientInterface $client
     */
    public function __construct($client)
    {
        $this->client = $client;
        $this->services = [];
    }

    /**
     * @param string $name
     *
     * @return null|string
     */
    abstract protected function getServiceClass($name);

    /**
     * @param string $name
     *
     * @return null|AbstractService|AbstractServiceFactory
     */
    public function __get($name)
    {
        $serviceClass = $this->getServiceClass($name);
        if (null !== $serviceClass) {
            if (!\array_key_exists($name, $this->services)) {
                $this->services[$name] = new $serviceClass($this->client);
            }

            return $this->services[$name];
        }

        \trigger_error('Undefined property: ' . static::class . '::$' . $name);

        return null;
    }
}

```
