Skip to content

Upgrading vlucas/phpdotenv 4 to 5

Breakingv4.3.0 → v5.8.0Platform6New7Changed9Fixed10Other9

Fetching 16 releases from GitHub…15 / 16
BreakingUpgrade verdict

6 platform requirement changes.

  • The library now works on PHP 8.6.
  • The library now officially supports PHP 8.5.
  • The library now officially works with PHP version 8.4.
  • This version no longer works on PHP 7.1, so users on that version must upgrade PHP before upgrading the package.
Top 3 of 6 that need code or config changes

vlucas/phpdotenv publishes an official migration guide for version 5. It covers more than the release notes do.

Upgrading guide ↗

PHP requirement changed in v5.6.0: ^5.5.9 || ^7.0 || ^8.0 → ^7.2.5 || ^8.0.

Platform6
Adds support for PHP 8.6.
Adds official support for PHP 8.5.
Adds official support for PHP 8.4.
Removes support for PHP 7.1.
Adds official support for PHP 8.3.
Adds official support for PHP 8.2.

Generated by DepDelta from published PHP source. Not mixed with prose notes.

  • removed: protected method Validator.assertCallback(callable $callback, $message = …)
  • removed: protected property Dotenv.loader
  • removed: protected property Dotenv.repository
  • removed: protected property Dotenv.store
  • removed: protected property Validator.repository
  • removed: protected property Validator.variables
  • changed: constructor Dotenv(LoaderInterface $loader, RepositoryInterface $repository, $store) → constructor Dotenv(StoreInterface $store, ParserInterface $parser, LoaderInterface $loader, RepositoryInterface $repository)
  • changed: constructor Validator(RepositoryInterface $repository, array $variables, $required = …) → constructor Validator(RepositoryInterface $repository, array $variables)
  • changed: method Validator.allowedRegexValues($regex) → method Validator.allowedRegexValues(string $regex)
  • changed: static method Dotenv.create(RepositoryInterface $repository, $paths, $names = …, $shortCircuit = …) → static method Dotenv.create(RepositoryInterface $repository, $paths, $names = …, bool $shortCircuit = …, ?string $fileEncoding = …)
  • changed: static method Dotenv.createArrayBacked($paths, $names = …, $shortCircuit = …) → static method Dotenv.createArrayBacked($paths, $names = …, bool $shortCircuit = …, ?string $fileEncoding = …)
  • changed: static method Dotenv.createImmutable($paths, $names = …, $shortCircuit = …) → static method Dotenv.createImmutable($paths, $names = …, bool $shortCircuit = …, ?string $fileEncoding = …)
  • changed: static method Dotenv.createMutable($paths, $names = …, $shortCircuit = …) → static method Dotenv.createMutable($paths, $names = …, bool $shortCircuit = …, ?string $fileEncoding = …)
  • changed: static method Dotenv.parse($content) → static method Dotenv.parse(string $content)
  • added: method Validator.assert(callable $callback, string $message)
  • added: method Validator.assertNullable(callable $callback, string $message)
  • added: method Validator.required()
  • added: static method Dotenv.createUnsafeImmutable($paths, $names = …, bool $shortCircuit = …, ?string $fileEncoding = …)
  • added: static method Dotenv.createUnsafeMutable($paths, $names = …, bool $shortCircuit = …, ?string $fileEncoding = …)
  • changed: class InvalidFileException extends InvalidArgumentException implements ExceptionInterface → final class InvalidFileException extends InvalidArgumentException implements ExceptionInterface
  • changed: class InvalidPathException extends InvalidArgumentException implements ExceptionInterface → final class InvalidPathException extends InvalidArgumentException implements ExceptionInterface
  • changed: class ValidationException extends RuntimeException implements ExceptionInterface → final class ValidationException extends RuntimeException implements ExceptionInterface
  • changed: interface ExceptionInterface → interface ExceptionInterface extends Throwable
  • added: final class InvalidEncodingException extends InvalidArgumentException implements ExceptionInterface
  • removed: class Lines
  • removed: class Parser
  • removed: class Value
  • removed: const Parser.COMMENT_STATE
  • removed: const Parser.DOUBLE_QUOTED_STATE
  • removed: const Parser.ESCAPE_SEQUENCE_STATE
  • removed: const Parser.INITIAL_STATE
  • removed: const Parser.SINGLE_QUOTED_STATE
  • removed: const Parser.UNQUOTED_STATE
  • removed: const Parser.WHITESPACE_STATE
  • removed: constructor Loader(array $whitelist = …)
  • removed: method Value.append($char, $var)
  • removed: method Value.getChars()
  • removed: method Value.getVars()
  • removed: protected property Loader.whitelist
  • removed: static method Lines.process(array $lines)
  • removed: static method Parser.parse($entry)
  • removed: static method Value.blank()
  • changed: class Loader implements LoaderInterface → final class Loader implements LoaderInterface
  • changed: method Loader.load(RepositoryInterface $repository, $content) → method Loader.load(RepositoryInterface $repository, array $entries)
  • changed: method LoaderInterface.load(RepositoryInterface $repository, $content) → method LoaderInterface.load(RepositoryInterface $repository, array $entries)
  • added: final class Resolver
  • added: static method Resolver.resolve(RepositoryInterface $repository, Value $value)
  • added: constructor Entry(string $name, ?Value $value = …)
  • added: final class Entry
  • added: final class EntryParser
  • added: final class Lexer
  • added: final class Lines
  • added: final class Parser implements ParserInterface
  • added: final class Value
  • added: interface ParserInterface
  • added: method Entry.getName()
  • added: method Entry.getValue()
  • added: method Parser.parse(string $content)
  • added: method ParserInterface.parse(string $content)
  • added: method Value.append(string $chars, bool $var)
  • added: method Value.getChars()
  • added: method Value.getVars()
  • added: static method EntryParser.parse(string $entry)
  • added: static method Lexer.lex(string $content)
  • added: static method Lines.process(array $lines)
  • added: static method Value.blank()
  • added: static method Value.create(string $chars, array $vars)
  • removed: class Regex
  • removed: static method Regex.match($pattern, $subject)
  • removed: static method Regex.replace($pattern, $replacement, $subject, $limit = …)
  • removed: static method Regex.replaceCallback($pattern, callable $callback, $subject, $limit = …)
  • removed: static method Regex.split($pattern, $subject)
  • removed: abstract class AbstractRepository implements RepositoryInterface
  • removed: constructor AbstractRepository($immutable)
  • removed: method AbstractRepository.clear($name)
  • removed: method AbstractRepository.get($name)
  • removed: method AbstractRepository.has($name)
  • removed: method AbstractRepository.offsetExists($offset)
  • removed: method AbstractRepository.offsetGet($offset)
  • removed: method AbstractRepository.offsetSet($offset, $value)
  • removed: method AbstractRepository.offsetUnset($offset)
  • removed: method AbstractRepository.set($name, $value = …)
  • removed: method RepositoryBuilder.withReaders(array $readers = …)
  • removed: method RepositoryBuilder.withWriters(array $writers = …)
  • removed: protected method AbstractRepository.clearInternal($name)
  • removed: protected method AbstractRepository.getInternal($name)
  • removed: protected method AbstractRepository.setInternal($name, $value = …)
  • removed: protected method AdapterRepository.clearInternal($name)
  • removed: protected method AdapterRepository.getInternal($name)
  • removed: protected method AdapterRepository.setInternal($name, $value = …)
  • removed: protected property AdapterRepository.readers
  • removed: protected property AdapterRepository.writers
  • removed: static method RepositoryBuilder.create()
  • changed: class AdapterRepository extends AbstractRepository → final class AdapterRepository implements RepositoryInterface
  • changed: class RepositoryBuilder → final class RepositoryBuilder
  • changed: constructor AdapterRepository(array $readers, array $writers, $immutable) → constructor AdapterRepository(ReaderInterface $reader, WriterInterface $writer)
  • changed: interface RepositoryInterface extends ArrayAccess → interface RepositoryInterface
  • changed: method RepositoryInterface.clear($name) → method RepositoryInterface.clear(string $name)
  • changed: method RepositoryInterface.get($name) → method RepositoryInterface.get(string $name)
  • changed: method RepositoryInterface.has($name) → method RepositoryInterface.has(string $name)
  • changed: method RepositoryInterface.set($name, $value = …) → method RepositoryInterface.set(string $name, string $value)
  • added: method AdapterRepository.clear(string $name)
  • added: method AdapterRepository.get(string $name)
  • added: method AdapterRepository.has(string $name)
  • added: method AdapterRepository.set(string $name, string $value)
  • added: method RepositoryBuilder.addAdapter($adapter)
  • added: method RepositoryBuilder.addReader($reader)
  • added: method RepositoryBuilder.addWriter($writer)
  • added: method RepositoryBuilder.allowList(?array $allowList = …)
  • added: static method RepositoryBuilder.createWithDefaultAdapters()
  • added: static method RepositoryBuilder.createWithNoAdapters()
  • removed: interface AvailabilityInterface
  • removed: method ApacheAdapter.clear($name)
  • removed: method ApacheAdapter.get($name)
  • removed: method ApacheAdapter.isSupported()
  • removed: method ApacheAdapter.set($name, $value = …)
  • removed: method ArrayAdapter.clear($name)
  • removed: method ArrayAdapter.get($name)
  • removed: method ArrayAdapter.isSupported()
  • removed: method ArrayAdapter.set($name, $value = …)
  • removed: method AvailabilityInterface.isSupported()
  • removed: method EnvConstAdapter.clear($name)
  • removed: method EnvConstAdapter.get($name)
  • removed: method EnvConstAdapter.isSupported()
  • removed: method EnvConstAdapter.set($name, $value = …)
  • removed: method PutenvAdapter.clear($name)
  • removed: method PutenvAdapter.get($name)
  • removed: method PutenvAdapter.isSupported()
  • removed: method PutenvAdapter.set($name, $value = …)
  • removed: method ReaderInterface.get($name)
  • removed: method ServerConstAdapter.clear($name)
  • removed: method ServerConstAdapter.get($name)
  • removed: method ServerConstAdapter.isSupported()
  • removed: method ServerConstAdapter.set($name, $value = …)
  • removed: method WriterInterface.clear($name)
  • removed: method WriterInterface.set($name, $value = …)
  • changed: class ApacheAdapter implements AvailabilityInterface, ReaderInterface, WriterInterface → final class ApacheAdapter implements AdapterInterface
  • changed: class ArrayAdapter implements AvailabilityInterface, ReaderInterface, WriterInterface → final class ArrayAdapter implements AdapterInterface
  • changed: class EnvConstAdapter implements AvailabilityInterface, ReaderInterface, WriterInterface → final class EnvConstAdapter implements AdapterInterface
  • changed: class PutenvAdapter implements AvailabilityInterface, ReaderInterface, WriterInterface → final class PutenvAdapter implements AdapterInterface
  • changed: class ServerConstAdapter implements AvailabilityInterface, ReaderInterface, WriterInterface → final class ServerConstAdapter implements AdapterInterface
  • changed: interface ReaderInterface extends AvailabilityInterface → interface ReaderInterface
  • changed: interface WriterInterface extends AvailabilityInterface → interface WriterInterface
  • added: constructor GuardedWriter(WriterInterface $writer, array $allowList)
  • added: constructor ImmutableWriter(WriterInterface $writer, ReaderInterface $reader)
  • added: constructor MultiReader(array $readers)
  • added: constructor MultiWriter(array $writers)
  • added: constructor ReplacingWriter(WriterInterface $writer, ReaderInterface $reader)
  • added: final class GuardedWriter implements WriterInterface
  • added: final class ImmutableWriter implements WriterInterface
  • added: final class MultiReader implements ReaderInterface
  • added: final class MultiWriter implements WriterInterface
  • added: final class ReplacingWriter implements WriterInterface
  • added: interface AdapterInterface extends ReaderInterface, WriterInterface
  • added: method ApacheAdapter.delete(string $name)
  • added: method ApacheAdapter.read(string $name)
  • added: method ApacheAdapter.write(string $name, string $value)
  • added: method ArrayAdapter.delete(string $name)
  • added: method ArrayAdapter.read(string $name)
  • added: method ArrayAdapter.write(string $name, string $value)
  • added: method EnvConstAdapter.delete(string $name)
  • added: method EnvConstAdapter.read(string $name)
  • added: method EnvConstAdapter.write(string $name, string $value)
  • added: method GuardedWriter.delete(string $name)
  • added: method GuardedWriter.write(string $name, string $value)
  • added: method ImmutableWriter.delete(string $name)
  • added: method ImmutableWriter.write(string $name, string $value)
  • added: method MultiReader.read(string $name)
  • added: method MultiWriter.delete(string $name)
  • added: method MultiWriter.write(string $name, string $value)
  • added: method PutenvAdapter.delete(string $name)
  • added: method PutenvAdapter.read(string $name)
  • added: method PutenvAdapter.write(string $name, string $value)
  • added: method ReaderInterface.read(string $name)
  • added: method ReplacingWriter.delete(string $name)
  • added: method ReplacingWriter.write(string $name, string $value)
  • added: method ServerConstAdapter.delete(string $name)
  • added: method ServerConstAdapter.read(string $name)
  • added: method ServerConstAdapter.write(string $name, string $value)
  • added: method WriterInterface.delete(string $name)
  • added: method WriterInterface.write(string $name, string $value)
  • added: static method AdapterInterface.create()
  • added: static method ApacheAdapter.create()
  • added: static method ArrayAdapter.create()
  • added: static method EnvConstAdapter.create()
  • added: static method PutenvAdapter.create()
  • added: static method ServerConstAdapter.create()
  • removed: abstract class Result
  • removed: class Error extends Result
  • removed: class Success extends Result
  • removed: method Error.error()
  • removed: method Error.mapError(callable $f)
  • removed: method Error.mapSuccess(callable $f)
  • removed: method Error.success()
  • removed: method Result.error()
  • removed: method Result.getError()
  • removed: method Result.getSuccess()
  • removed: method Result.mapError(callable $f)
  • removed: method Result.mapSuccess(callable $f)
  • removed: method Result.success()
  • removed: method Success.error()
  • removed: method Success.mapError(callable $f)
  • removed: method Success.mapSuccess(callable $f)
  • removed: method Success.success()
  • removed: static method Error.create($value)
  • removed: static method Success.create($value)
  • removed: method StoreBuilder.withNames($names = …)
  • removed: method StoreBuilder.withPaths($paths)
  • removed: protected property FileStore.filePaths
  • removed: protected property FileStore.shortCircuit
  • removed: protected property StoreBuilder.shortCircuit
  • removed: static method StoreBuilder.create()
  • changed: class FileStore implements StoreInterface → final class FileStore implements StoreInterface
  • changed: class StoreBuilder → final class StoreBuilder
  • changed: constructor FileStore(array $filePaths, $shortCircuit) → constructor FileStore(array $filePaths, bool $shortCircuit, ?string $fileEncoding = …)
  • changed: constructor StringStore($content) → constructor StringStore(string $content)
  • added: method StoreBuilder.addName(string $name)
  • added: method StoreBuilder.addPath(string $path)
  • added: method StoreBuilder.fileEncoding(?string $fileEncoding = …)
  • added: static method StoreBuilder.createWithDefaultName()
  • added: static method StoreBuilder.createWithNoNames()
  • changed: class Paths → final class Paths
  • changed: class Reader → final class Reader
  • changed: static method Reader.read(array $filePaths, $shortCircuit = …) → static method Reader.read(array $filePaths, bool $shortCircuit = …, ?string $fileEncoding = …)
  • added: final class Regex
  • added: final class Str
  • added: static method Regex.matches(string $pattern, string $subject)
  • added: static method Regex.occurrences(string $pattern, string $subject)
  • added: static method Regex.replaceCallback(string $pattern, callable $callback, string $subject, ?int $limit = …)
  • added: static method Regex.split(string $pattern, string $subject)
  • added: static method Str.len(string $input)
  • added: static method Str.pos(string $haystack, string $needle)
  • added: static method Str.substr(string $input, int $start, ?int $length = …)
  • added: static method Str.utf8(string $input, ?string $encoding = …)