Я удивлен, что не считал ни в одном предыдущем ответе это, которое я рассматриваю самым решающим аспектом:
я использую структуры, когда я хочу тип без идентификационных данных. Например, 3D точка:
public struct ThreeDimensionalPoint
{
public readonly int X, Y, Z;
public ThreeDimensionalPoint(int x, int y, int z)
{
this.X = x;
this.Y = y;
this.Z = z;
}
public override string ToString()
{
return "(X=" + this.X + ", Y=" + this.Y + ", Z=" + this.Z + ")";
}
public override int GetHashCode()
{
return (this.X + 2) ^ (this.Y + 2) ^ (this.Z + 2);
}
public override bool Equals(object obj)
{
if (!(obj is ThreeDimensionalPoint))
return false;
ThreeDimensionalPoint other = (ThreeDimensionalPoint)obj;
return this == other;
}
public static bool operator ==(ThreeDimensionalPoint p1, ThreeDimensionalPoint p2)
{
return p1.X == p2.X && p1.Y == p2.Y && p1.Z == p2.Z;
}
public static bool operator !=(ThreeDimensionalPoint p1, ThreeDimensionalPoint p2)
{
return !(p1 == p2);
}
}
, Если у Вас есть два экземпляра этой структуры, Вы не заботитесь, являются ли они единственной частью данных в памяти или два. Вы просто заботитесь о значении (значениях), которое они содержат.
Вы можете использовать curl_getinfo :
До вызова
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
После
$headers = curl_getinfo($ch, CURLINFO_HEADER_OUT);
AFAIK, привязка PHP / CURL все еще не имеет надлежащей поддержки для CURLOPT_DEBUGFUNCTION, который является обратным вызовом от libcurl, который может предоставить все эти детали.
Это основная причина, по которой я рекомендую людям разрабатывать сценарии HTTP с помощью инструмента командной строки curl и его опции --trace-ascii ПЕРВЫЙ, а затем преобразовывать это в функцию PHP.
обязательно установите параметр CURLINFO_HEADER_OUT перед вызовом curl_getinfo
curl_setopt ($ c, CURLINFO_HEADER_OUT, true);