result = array_merge( array_fill_keys(static::KEYS, null), [ "missing" => true, "null" => false, "valid" => false, "normalized" => false, ]); } function __get(string $name) { return $this->result[$name]; } function __set(string $name, $value): void { $this->result[$name] = $value; } protected static function replace_key(string &$message, ?string $key): void { if ($key) $message = str_replace("{key}", $key, $message); else $message = str_replace("{key}: ", "", $message); } function setMissing(ScalarSchema $schema): int { $this->missing = true; if (!$schema->required) { $this->null = true; $this->valid = true; $this->normalized = true; return ref_analyze::NORMALIZED; } else { $message = cl::get($schema->messages, "missing"); self::replace_key($message, $schema->name); $this->message = $message; return ref_analyze::MISSING; } } function setNull(ScalarSchema $schema): int { $this->missing = true; if ($schema->nullable) { $this->valid = true; $this->normalized = true; return ref_analyze::NORMALIZED; } else { $message = cl::get($schema->messages, "null"); self::replace_key($message, $schema->name); $this->message = $message; return ref_analyze::NULL; } } }