Значение оператора :: C # и PhP - PullRequest
1 голос
/ 30 декабря 2008

В своей работе я сталкивался с синтаксисом вроде global :: (C #) или G: Загрузка ($ value) в Php, что они означают?

Ответы [ 8 ]

9 голосов
/ 30 декабря 2008

В C # :: - оператор квалификатора псевдонима пространства имен, а global - глобальное пространство имен. Это необходимо, если у вас есть перекрывающиеся классы и пространства имен.

Например, если у вас есть класс Foo.Bar и Baz.Foo.Bar, тогда ссылка Foo.Bar может быть неоднозначной ссылкой, поскольку Foo.Bar существует как в глобальном пространстве имен, так и в пространстве имен Baz. Однако, сказав global::Foo.Bar, вы явно ограничиваете ссылку на глобальное пространство имен, и, таким образом, она больше не является неоднозначной.

Подробнее здесь .

4 голосов
/ 30 декабря 2008

В PHP :: используется для доступа к статическим членам или методам, см. http://www.php.net/manual/en/language.oop5.static.php

3 голосов
/ 30 декабря 2008

Если C #, :: называется классификатором псевдонимов пространства имен.

Он определяет, в каком именно пространстве имен вы находитесь, если возникнут неоднозначности. Например:

using MyNameSpace;

...

global::System.Data 

отличает пространство имен System.Data от MyNameSpace.System.Data.

Посмотрите на ссылку на C # оператора :::

http://msdn.microsoft.com/en-us/library/htccxtad.aspx

и более полезно, статья MSDN, демонстрирующая его использование

http://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx

2 голосов
/ 15 сентября 2010

Рассмотрим следующий пример:

namespace  A { 
    public class MyClass { }
} 

namespace namespaceB
{
    public class A
    {
        public class MyClass { }
    }

    public class OtherClass
    {
        public A.MyClass MyAClass;
    }
}

Пояснение:

В приведенном выше примере компилятор всегда разрешает MyAClass для типа namespaceB.A.MyClass.

Если вы хотели, чтобы это был A.MyClass, не было никакого способа сделать это до C # 2.0.

В C # 2.0 вы должны использовать: открытый класс MyOtherClass

{ public global::A.MyClass yAClass; }

Чтобы указать, что вам следует использовать не локальную область имен, а корневое пространство имен.

2 голосов
/ 30 декабря 2008

в объектно-ориентированных языках программирования на основе классов (таких как C ++, Java, PHP, ...) есть свойства (также называемые полями), которые представляют собой данные и являются просто переменными или константами, а методы - функциональностью класса и на самом деле функции (процедуры). каждый класс может быть создан как объект. каждый объект имеет все данные и функциональные возможности базового класса в начале, но данные могут быть изменены и отличаться от одного объекта к другому. Есть 2 вида свойств и 2 вида методов. некоторые свойства являются общими для всех объектов класса. это означает, что если вы измените эти данные класса, те же данные всех инстанцированных объектов будут изменены на новое значение. свойства такого типа называются свойствами класса или статическими свойствами (поскольку при определении этих переменных в большинстве языков вы будете использовать ключевое слово static). некоторые другие свойства являются специфическими для каждого объекта. Изменение данных объекта, не влияет на данные других объектов. они называются свойствами объекта или свойствами экземпляра. некоторые методы вызываются из объекта, существуют методы объекта. это объектные методы, и для их использования необходимо сначала создать экземпляр класса и использовать объект. некоторые другие методы вызываются с использованием самого класса. это методы класса (или статические методы), если вам нужна одна из этих функций, вам не нужен объект. чтобы использовать свойства / методы объекта, в PHP (например, C ++) вы должны использовать оператор ->:

object->method();
object->property;

чтобы использовать свойства / методы класса в PHP (например, C ++), вы должны использовать оператор :::

class::method();
class::property;

на таких языках, как оператор Jave. используется для всех свойств / методов:

object.method();
class.property;

предположим, у вас есть класс Круга. этот класс определяет некоторые данные, такие как радиус, центральные кординаты и константа для значения PI. также есть метод для расчета площади круга.

Вот некоторый код PHP, чтобы прояснить это:

<?php
class Circle {
    public $radius;
    public $centerX;
    public $centerY;
    public static $PI = 3.1415;
    public function __construct($r,$x,$y) {
        $this->radius = $r;
        $this->centerX = $x;
        $this->centerY = $y;
    }
    public function getArea() {
        return self::$PI * $this->radius * $this->radius;
    }
}
$circle1 = new Circle(10,0,0);
echo $circle1->getArea() . "<br>\n";
$circle2 = new Circle(15,10,12);
echo $circle2->getArea() . "<br>\n";
Circle::$PI = 3.14;
echo $circle1->getArea() . "<br>\n";
echo $circle2->getArea() . "<br>\n";
?>

в этом примере мы определяем класс круга, который имеет свойства объекта (radius, centerX, CenterY), методы объекта (getArea ()) и свойство Class (PI). изменяя статическое свойство PI, можно повлиять на площадь обоих объектов.

1 голос
/ 30 декабря 2008

В PHP он называется оператором разрешения области действия (Paamayim Nekudotayim) и разрешает доступ к элементам или константам в классе

1 голос
/ 30 декабря 2008

В C # оператор global :: используется для обеспечения того, чтобы следующее имя интерпретировалось как выражение глобального имени вместо локального. Основное использование для этого - когда разработчики имеют вложенное пространство имен, имя которого совпадает с глобальным пространством имен. Без оператора global :: невозможно получить доступ к глобальной версии.

namespace Foo { 
  namespace System {
    class DateTime {} 
    class Example {
      object Example() { 
        return System.DateTime.Now; // Returns Foo.System.DateTime.Now
        return global::System.DateTime.Now; // Returns mscorlib,System.DateTime.Now
      }
    }
  }
}
0 голосов
/ 30 декабря 2008

В C # оператор :: является квалификатором псевдонима пространства имен. Он используется для разрешения идентификаторов в соответствующем пространстве имен, особенно в ситуациях, когда существуют неоднозначности.

Итак, предположим, что вы создаете псевдоним пространства имен с помощью

using IOAlias = System.IO;

и хотите объявить экземпляр класса StreamReader. Вы можете сделать это через

IOAlias::StreamReader sr = new StreamReader(path);

Кроме того, вы можете разрешить глобальное пространство имен через

global::System.IO.StreamReader sr = new StreamReader(path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...