Heim > Backend-Entwicklung > PHP-Tutorial > Arbeiten Sie mit Variablen, als wären sie Objekte

Arbeiten Sie mit Variablen, als wären sie Objekte

Barbara Streisand
Freigeben: 2025-01-06 06:33:40
Original
245 Leute haben es durchsucht

Trabajar con variables como si fuesen objetos

Dieser Artikel ist eine persönliche Meinung und ich versuche nicht, mich zu irgendetwas zu äußern.

Eines der Dinge, die mir an Sprachen wie Ruby oder JavaScript am besten gefallen, ist, dass ihre Variablen Objekte sind. Ich finde den Code in einigen Aspekten viel besser lesbar, in anderen Fällen jedoch nicht so sehr.

Ein Beispiel wäre.

# Ruby Program for length method.
str = "Hello, world!"
puts str.length # prints 13 to the console
Nach dem Login kopieren

Während es in PHP ist

$str = 'Hello, world!';
echo strlen($str);
Nach dem Login kopieren

Das heißt, aus meiner Sicht ist die Ruby- oder JavaScript-Form besser lesbar, da die Variable das Subjekt und die Methode das Prädikat wäre.

PHP unterstützt diese Art des Codeschreibens nicht und deshalb habe ich eine Klasse erstellt, die dies ermöglicht, aber der Zweck der Klasse ist nur zum Spielen, sie ist nicht für die Verwendung in der Produktion gedacht Leistungsprobleme haben

<?php

namespace Scalar;

use Exception;
use ReflectionFunction;

class Scalar {

  /**
   * @var mixed
   * Value that can only be scalar.
   */
  private $Scalar;

  /**
   * Constructor: Initializes the Scalar object.
   * @param mixed $Scalar
   * @throws Exception if the value is not scalar.
   */
  public function __construct($Scalar) {
    if (!is_scalar($Scalar)) {
      throw new Exception('It\'s not a scalar value');
    }
    $this->Scalar = $Scalar;
  }

  /**
   * Magic method: Dynamically calls a PHP function with the scalar value.
   * Supports named parameters if provided as an associative array.
   * @param string $method The name of the function to call.
   * @param array $arguments Additional arguments for the function.
   * @return mixed The result of the function call.
   * @throws Exception if the function does not exist.
   */
  public function __call($method, $arguments) {
    if (!function_exists($method)) {
      throw new Exception('The function called ' . $method . ' doesn\'t exist');
    }

    // Verificar si los argumentos son asociativos (named parameters)
    if (!empty($arguments) && array_keys($arguments) !== range(0, count($arguments) - 1)) {
      $refFunc = new ReflectionFunction($method);
      $params = $refFunc->getParameters();

      $mappedArgs = [];
      foreach ($params as $param) {
        $name = $param->getName();
        if (isset($arguments[$name])) {
          // Asignar el valor proporcionado
          $mappedArgs[] = $arguments[$name];
        } elseif ($name === 'data') {
          // Insertar $this->Scalar si el parámetro es 'data'
          $mappedArgs[] = $this->Scalar;
        } elseif ($param->isDefaultValueAvailable()) {
          // Usar el valor predeterminado si está disponible
          $mappedArgs[] = $param->getDefaultValue();
        } else {
          // Parámetro requerido sin valor proporcionado
          throw new Exception("Missing required parameter: $name for function $method");
        }
      }

      return $refFunc->invokeArgs($mappedArgs);
    } else {
      // Llamada con argumentos posicionales (por defecto, insertar scalar al inicio)
      array_unshift($arguments, $this->Scalar);
      return call_user_func_array($method, $arguments);
    }
  }

  /**
   * Get the scalar value.
   * @return mixed
   */
  public function getScalar() {
    return $this->Scalar;
  }
}




Nach dem Login kopieren

Es ist auch wichtig zu bedenken, dass es für eine gute Funktion notwendig ist, die Funktionalität zu nutzen, die Variablen mit ihrem Namen voranzustellen

<?PHP
$data = new CustomerData(
    name: $input['name'],
    email: $input['email'],
    age: $input['age'],
);
Nach dem Login kopieren

Ein Beispiel für die Verwendung der Klasse mit einer Einzelparameterfunktion und einer Funktion mit mehreren Parametern:

<?PHP
try {
    $a = 'hola mundo';
    $a_object = new Scalar($a);

    // Llamar a la función hash con named parameters
    $result = $a_object->hash(algo: 'sha256', binary: true);
    echo $result; // Hash binario de 'hola mundo'

    // Llamar a otras funciones
    echo $a_object->strlen(); // Devuelve 10 (longitud de 'hola mundo')
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonArbeiten Sie mit Variablen, als wären sie Objekte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage