Rumah > pembangunan bahagian belakang > tutorial php > Bekerja dengan pembolehubah seolah-olah ia adalah objek

Bekerja dengan pembolehubah seolah-olah ia adalah objek

Barbara Streisand
Lepaskan: 2025-01-06 06:33:40
asal
303 orang telah melayarinya

Trabajar con variables como si fuesen objetos

Artikel ini adalah pendapat peribadi dan saya tidak cuba bercakap tentang apa-apa.

Salah satu perkara yang paling saya sukai tentang bahasa seperti Ruby atau JavaScript ialah pembolehubahnya ialah objek, saya dapati kod itu lebih mudah dibaca dalam beberapa aspek, pada masa lain tidak begitu.

Contohnya ialah.

# Ruby Program for length method.
str = "Hello, world!"
puts str.length # prints 13 to the console
Salin selepas log masuk

Sementara dalam PHP ia

$str = 'Hello, world!';
echo strlen($str);
Salin selepas log masuk

Yang berkata, dari sudut pandangan saya, borang Ruby atau JavaScript lebih mudah dibaca kerana ia akan menjadi pembolehubah yang menjadi subjek dan kaedahnya akan menjadi predikat.

PHP tidak menyokong cara menulis kod ini dan itulah sebabnya saya telah mencipta kelas yang membolehkannya dilakukan, tetapi tujuan kelas hanya untuk bermain, ia tidak bertujuan untuk digunakan dalam pengeluaran kerana ia mungkin mempunyai masalah prestasi

<?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;
  }
}




Salin selepas log masuk

Perlu juga diingat bahawa untuk ia berfungsi dengan baik, anda perlu menggunakan fungsi menulis pembolehubah dengan nama mereka di hadapan

<?PHP
$data = new CustomerData(
    name: $input['name'],
    email: $input['email'],
    age: $input['age'],
);
Salin selepas log masuk

Contoh penggunaan kelas dengan fungsi parameter tunggal dan fungsi dengan berbilang parameter:

<?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();
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bekerja dengan pembolehubah seolah-olah ia adalah objek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan