source

PHP는 에 상당합니다.NET/Java의 toString()

manycodes 2023. 1. 29. 20:20
반응형

PHP는 에 상당합니다.NET/Java의 toString()

PHP 변수 값을 문자열로 변환하려면 어떻게 해야 합니까?

빈 문자열로 연결하는 것보다 더 나은 방법을 찾고 있었습니다.

$myText = $myVar . '';

ToString().method(Java)로 지정합니다.

주조 연산자를 사용할 수 있습니다.

$myText = (string)$myVar;

문자열 캐스팅 및 변환에 대한 자세한 내용은 PHP 매뉴얼의 Strings 섹션에 나와 있습니다. 여기에는 boulan 및 null에 대한 특별한 처리가 포함됩니다.

이것은 타이프캐스팅을 사용하여 이루어집니다.

$strvar = (string) $var; // Casts to string
echo $var; // Will cast to string implicitly
var_dump($var); // Will show the true type of the variable

클래스에서는, 마법의 메서드를 사용해 출력되는 것을 정의할 수 있습니다.다음의 예를 나타냅니다.

class Bottles {
    public function __toString()
    {
        return 'Ninety nine green bottles';
    }
}

$ex = new Bottles;
var_dump($ex, (string) $ex);
// Returns: instance of Bottles and "Ninety nine green bottles"

기타 유형의 주조 예:

$i = 1;

// int 1
var_dump((int) $i);

// bool true
var_dump((bool) $i);

// string "1"
var_dump((string) 1);

print_r 사용:

$myText = print_r($myVar,true);

다음과 같이 사용할 수도 있습니다.

$myText = print_r($myVar,true)."foo bar";

세팅이 됩니다.$myText문자열에 연결합니다.

array (
  0 => '11',
)foo bar

var_export를 사용하여 좀 더 자세한 정보를 얻을 수 있습니다(변수 유형,

$myText = var_export($myVar,true);

다음과 같이 타이프캐스팅을 사용할 수 있습니다.

$var = (string)$varname;

또는 StringValue:

$var = strval($varname);

또는 SetType:

$success = settype($varname, 'string');
// $varname itself becomes a string

그들은 모두 타입-저글링의 관점에서 같은 일을 한다.

PHP 변수 값을 문자열로 변환하려면 어떻게 해야 합니까?

값은 (string) cast 또는 strval() 함수를 사용하여 문자열로 변환할 수 있습니다(편집: Thomas도 언급했듯이).

스트링으로 사용하면 자동으로 캐스트됩니다.

스트래블을 찾고 있습니다.

string strval ( mixed $var )

변수의 문자열 값을 가져옵니다.문자열로의 변환의 상세한 것에 대하여는, 문자열의 메뉴얼을 참조해 주세요.

이 함수는 반환된 값에 대해 형식을 지정하지 않습니다.숫자 값을 문자열로 포맷하는 방법을 찾는 경우 sprintf() 또는 number_format()을 참조하십시오.

은 그냥 하세요.(string)$var을 사용하다PHP는 동적으로 입력되는 언어이며 변수는 즉시 문자열에 캐스트됩니다.

하려면 을 .__toString()이치노이 메서드는 예외를 발생시키는 것이 금지되어 있습니다.

큰따옴표로 묶으면 됩니다.

$myText = "$myVar";

어떤 출력도 얻을 수 있다는 것을 언급할 필요가 있다고 생각합니다(예:print_r,var_dump출력 버퍼링을 사용하여 변수를 설정합니다.

<?php
    ob_start();
    var_dump($someVar);
    $result = ob_get_clean();
?>

감사: var_dump 결과를 문자열로 캡처하려면 어떻게 해야 합니까?

또 다른 옵션은 내장된 settype 함수를 사용하는 것입니다.

<?php
$foo = "5bar"; // string
$bar = true;   // boolean

settype($foo, "integer"); // $foo is now 5   (integer)
settype($bar, "string");  // $bar is now "1" (string)
?>

이를 통해 형식 캐스팅과 달리 변수에 대한 변환이 실제로 수행되며 여러 유형으로 변환하는 일반적인 방법을 사용할 수 있습니다.

Thomas G에 의한 답변에 더해서.메이필드:

현악기 주조 매뉴얼 링크를 따라가면 다음과 같은 특별한 경우를 이해할 수 있습니다.

(string) cast는 특히 변수 $a가 오브젝트일 경우 선호됩니다.이는 PHP가 __toString() 매직 메서드를 호출함으로써 오브젝트 모델에 따라 캐스팅 프로토콜을 따르기 때문입니다($a가 인스턴스화된 클래스에서 정의된 경우).

PHP는 다음과 같은 작업을 수행합니다.

function castToString($instance) 
{ 
    if (is_object($instance) && method_exists($instance, '__toString')) {
        return call_user_func_array(array($instance, '__toString'));
    }
}

(문자열) 캐스팅 작업은 코드를 객체 지향적으로 만드는 PHP5+ 프로그래밍에 권장되는 기술입니다.IMO는 Java/C#/etc와 같은 다른 OOP 언어와의 디자인 유사성(차이)을 보여주는 좋은 예입니다. 즉, 특별한 PHP 방식(좋은 점이나 가치 있는 점 등)입니다.

은 반드시 하다.__toString스트링에 캐스팅되는 메서드.이 메서드를 정의하지 않은 오브젝트는 spl_object_hash 함수를 사용하여 문자열 표현을 생성할 수 있습니다.

이 함수는 개체의 고유 식별자를 반환합니다.이 id는 오브젝트가 파기되지 않는 한 오브젝트를 저장하거나 오브젝트를 식별하기 위한 해시 키로 사용할 수 있습니다.개체가 삭제되면 해당 해시는 다른 개체에 재사용될 수 있습니다.

가 있습니다.__toString md5(spl_object_hash($this))은 오브젝트간에 할 수 에 출력을 하기 .spl_object_module은 오브젝트 간에 매우 유사합니다.

이는 변수가 개체로 초기화되고 나중에 다른 개체로 변경된 것으로 의심되는 코드를 디버깅할 때 특히 유용합니다.변수를 로그에 에코하는 것만으로 오브젝트해시로부터의 변경을 확인할 수 있습니다(또는 알 수 없습니다.

Java의 toString()은 단순히 String에 캐스트하는 방법이 아니기 때문에 이 질문은 조금 오해의 소지가 있다고 생각합니다.이것이 (string) 또는 String.valueOf()를 통한 캐스팅입니다.PHP에서도 동작합니다.

// Java
String myText = (string) myVar;

// PHP
$myText = (string) $myVar;

Java는 타입 세이프이기 때문에 문제가 있을 수 있습니다(자세한 내용은 여기를 참조).

하지만 말씀드렸듯이 이것은 캐스팅이기 때문에 Java의 toString()과 동등하지 않습니다.

Java의 toString은 단순히 객체를 String에 캐스팅하는 것이 아닙니다. 대신 String 표현이 표시됩니다.이것이 PHP의 __toString()의 기능입니다.

// Java
class SomeClass{
    public String toString(){
        return "some string representation";
    }
}

// PHP
class SomeClass{
    public function __toString()
    {
        return "some string representation";
    }
}

그리고 반대쪽에서 보면:

// Java
new SomeClass().toString(); // "Some string representation"

// PHP
strval(new SomeClass); // "Some string representation"

"String 표현"이란 무슨 뜻입니까?수백만 권의 책이 있는 도서관을 위한 수업을 상상해 보세요.

  • 해당 클래스를 String으로 지정하면 데이터(기본적으로 여기의 모든 책)가 문자열로 변환되므로 String은 매우 길고 대부분의 경우 유용하지 않습니다.
  • 대신 [To String]는 라이브러리의 이름만 나타내는 String 표현을 제공합니다.이 방법은 더 짧기 때문에 더 적은 양의 중요한 정보를 제공합니다.

둘 다 유효한 접근법이지만, 목표가 매우 다르기 때문에 모든 경우에 완벽한 해결책은 아닙니다.필요에 맞는 것을 현명하게 선택해야 합니다.

물론 더 많은 옵션이 있습니다.

$no = 421337  // A number in PHP
$str = "$no"; // In PHP, stuff inside "" is calculated and variables are replaced
$str = print_r($no, true); // Same as String.format();
$str = settype($no, 'string'); // Sets $no to the String Type
$str = strval($no); // Get the string value of $no
$str = $no . ''; // As you said concatenate an empty string works too

이러한 메서드는 모두 문자열을 반환합니다.이들 중 일부는 내부적으로 __toString을 사용하고 다른 일부는 개체에서 실패합니다.상세한 것에 대하여는, PHP 의 메뉴얼을 참조해 주세요.

이전 응답의 메서드 중 일부는 예를 들어 077543과 같이 의도한 문자열 변수의 선두가 0일 때 실패합니다.

이러한 변수를 변환하려고 하면 변수가 base 8(옥탈)로 변환되기 때문에 원하는 문자열을 얻을 수 없습니다.

것이 이이 all가 된다.$str값은 32611 입니다.

$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");

메뉴얼에서는, 다음의 조작도 실시할 수 있습니다.

$str = "$foo";

캐스팅이랑 똑같은데 더 예쁜 것 같아.

출처:

큰따옴표도 쓸 수 있을 텐데...스트링을 만들고 2개의 빈 문자열 사이에 $myVar라는 캐스트된 STRING 값을 추가/삽입합니다.

라는 이름의 메서드는 언제든지 만들 수 있습니다.반환되는 ToString($in)

$in . '';  

정수나 부울란과 같은 단순한 타입 이외의 타입을 변환하는 경우는, 변환하는 타입의 함수/메서드를 작성할 필요가 있습니다.그렇지 않으면 PHP는 타입(어레이, Google Sniffer, Bidet 등)만 인쇄합니다.

PHP는 동적으로 입력되기 때문에 Chris Fournier가 말한 것처럼 문자열처럼 사용하면 문자열이 됩니다.문자열 형식을 더 잘 제어하고 싶다면 printf가 정답입니다.

var_export PHP 함수를 사용할 수도 있습니다.

$parent_category_name = "new clothes & shoes";

// To make it to string option one
$parent_category = strval($parent_category_name);

// Or make it a string by concatenating it with 'new clothes & shoes'
// It is useful for database queries
$parent_category = "'" . strval($parent_category_name) . "'";

객체의 경우 주조 연산자를 사용하지 못할 수 있습니다.신,, instead를 사용합니다.json_encode()★★★★★★ 。

예를 들어, 다음은 내용을 오류 로그에 출력합니다.

error_log(json_encode($args));

stdClass의 텍스트 부분을 문자열 유형으로 변환하려면 다음과 같이 약간 이상하지만 제대로 작동하는 접근 방식을 시도합니다.

$my_std_obj_result = $SomeResponse->return->data; // Specific to object/implementation

$my_string_result = implode ((array)$my_std_obj_result); // Do conversion

__toString 메서드 또는 (문자열) 캐스트

$string=(string)$variable;  //force make string 

오브젝트를 문자열로 취급할 수 있습니다.


class Foo
{

  public function __toString()
  {
     return "foo";
  }

}

echo new Foo(); //foo

또한 다른 트릭을 가지세요. int 변수가 있다고 가정하고 문자열을 만듭니다.


$string=''.$intvariable;

PHP에서는 데이터 유형이 내부적으로 처리되기 때문에 이 작업이 어려울 수 있습니다.오브젝트나 리소스와 같은 복잡한 유형을 의미하는 것이 아니라고 가정할 때 문자열에 일반 캐스팅을 해도 잘못된 변환이 발생할 수 있습니다.경우에 따라서는 pack/unpack이 필요할 수도 있지만 문자열 인코딩에 문제가 있을 수 있습니다., i i jugg 、 이 、 type 、 type 、 type 、 type 、 type 、 type 、 type ling ling i i 。$myText = $my_var .''; ★★★★★★★★★★★★★★★★★」$myText = (string)$my_var;이치노력하다그 이외의 경우는, 범용 캐스트나 serialize() 또는 json_encode()를 사용하는 것을 추천합니다만, 역시 문자열로 무엇을 할지에 따라 다릅니다.

주요 차이점은 Java와 입니다.NET은, 바이너리 데이터와 원시 타입을 취급해, 특정의 타입과 거기서 문자열로 변환해, 유저로부터 특정의 케이스가 추상화되어 있는 경우에서도, 한층 더 뛰어난 기능을 갖추고 있습니다.PHP에서는 16진수를 다루어도 요령을 터득할 때까지 머리를 긁적거릴 수 있습니다.

자바에 필적할 만한 더 좋은 답이 생각나지 않는다.NET 여기서 _toString() 및 이러한 메서드는 보통 객체 또는 데이터 유형에 고유한 방식으로 구현됩니다.이렇게 하면 매직 메서드 __toString()과 __serialize()/_unserialize()가 최적의 비교가 될 수 있습니다.

또한 PHP는 원시 데이터 유형의 동일한 개념을 가지고 있지 않습니다.본질적으로 PHP의 모든 데이터 유형은 객체로 간주될 수 있으며, 내부 핸들러는 플로트를 int로 변환할 때처럼 정확성을 잃는 것을 의미하더라도 그것들을 다소 보편적으로 만들려고 합니다.네이티브 익스텐션 내에서 대상과 작업하지 않는 한 Java에서 가능한 한 유형을 처리할 수 없습니다.

PHP 사용자 공간은 int, char, bool 또는 float를 객체로 정의하지 않지만 모든 것은 C에서 찾을 수 있는 객체에 가까운 zval 구조로 저장되며 zval 내의 데이터를 처리하는 일반적인 함수가 있습니다.PHP 내에서 데이터에 액세스하는 모든 방법은 zval 구조와 zend VM을 통해 네이티브 유형과 구조로 변환하지 않고 데이터를 처리할 수 있습니다.Java 유형을 사용하면 데이터에 대한 세분화된 액세스와 데이터를 조작하는 더 많은 방법을 사용할 수 있을 뿐만 아니라 복잡성도 높아지기 때문에 strong type vs weak type 인수가 됩니다.

다음 링크가 도움이 됩니다.

https://www.php.net/manual/en/language.types.type-juggling.php https://www.php.net/manual/en/language.oop5.magic.php

variable To String을 사용합니다.모든 PHP 유형을 처리하고 유연합니다(원하는 경우 확장할 수 있습니다).

언급URL : https://stackoverflow.com/questions/28098/php-equivalent-of-net-javas-tostring

반응형