значения объекта доступа php - PullRequest
0 голосов
/ 16 января 2012

РЕДАКТИРОВАТЬ: Спасибо всем.Я даже не заметил, что это был private lol, поэтому я изменил их с private на public, теперь он должен быть доступен ... вопрос теперь в том, как мне получить доступ к значению скажем 'backpackPosition'?еще раз спасибо!

TF2Inventory Object
(
[fetchDate] => 123456123
[items] => Array
    (
        [60] => TF2Item Object
            (
                [equipped] => Array
                    (
                        [scout] => 1
                        [sniper] => 1
                        [soldier] => 1
                        [demoman] => 1
                        [medic] => 1
                        [heavy] => 1
                        [pyro] => 1
                        [spy] => 1
                    )

                [attributes] => Array
                    (
                        [0] => stdClass Object
                            (
                                [name] => custom employee number
                                [class] => set_employee_number
                                [value] => 0
                            )

                        [1] => stdClass Object
                            (
                                [name] => cannot trade
                                [class] => cannot_trade
                                [value] => 1
                            )

                    )

                [backpackPosition] => 61
                [className] => tf_wearable
                [count] => 1
                [defindex] => 170
                [id] => 535518002
                [level] => 20
                [name] => Primeval Warrior
                [quality] => unique
                [slot] => misc
                [tradeable] => 
                [type] => Badge
            )

        [43] => TF2Item Object
            (
                [equipped] => Array
                    (
                        [scout] => 0
                        [sniper] => 0
                        [soldier] => 0
                        [demoman] => 0
                        [medic] => 0
                        [heavy] => 0
                        [pyro] => 0
                        [spy] => 0
                    )

                [attributes] => Array
                    (
                        [0] => stdClass Object
                            (
                                [name] => cannot trade
                                [class] => cannot_trade
                                [value] => 1
                            )

                    )

                [backpackPosition] => 44
                [className] => tf_wearable
                [count] => 1
                [defindex] => 471
                [id] => 535518003
                [level] => 50
                [name] => Proof of Purchase
                [quality] => unique
                [slot] => head
                [tradeable] => 
                [type] => Hat
            )

        [42] => TF2Item Object
            (
                [equipped] => Array
                    (
                        [scout] => 1
                        [sniper] => 1
                        [soldier] => 1
                        [demoman] => 1
                        [medic] => 1
                        [heavy] => 1
                        [pyro] => 1
                        [spy] => 1
                    )

                [attributes] => 
                [backpackPosition] => 43
                [className] => tf_wearable
                [count] => 1
                [defindex] => 278
                [id] => 541628464
                [level] => 31
                [name] => Horseless Headless Horsemann's Head
                [quality] => unique
                [slot] => head
                [tradeable] => 
                [type] => Hat
            )

        [59] => TF2Item Object
            (
                [equipped] => Array
                    (
                        [scout] => 0
                        [sniper] => 0
                        [soldier] => 0
                        [demoman] => 0
                        [medic] => 0
                        [heavy] => 0
                        [pyro] => 0
                        [spy] => 0
                    )

                [attributes] => Array
                    (
                        [0] => stdClass Object
                            (
                                [name] => cannot trade
                                [class] => cannot_trade
                                [value] => 1
                            )

                    )

                [backpackPosition] => 60
                [className] => tf_wearable
                [count] => 1
                [defindex] => 115
                [id] => 548155039
                [level] => 10
                [name] => Mildly Disturbing Halloween Mask
                [quality] => unique
                [slot] => head
                [tradeable] => 
                [type] => Holiday Hat
            )

Ответы [ 6 ]

2 голосов
/ 16 января 2012

Частные участники - это просто частные.Только класс, к которому они принадлежат, может получить к ним доступ.Если вы хотите иметь возможность извлекать их значения, вам нужно либо сделать их защищенными (и, таким образом, доступными для родительских и дочерних классов), либо общедоступными (доступными для всех классов).Другой вариант - написать несколько методов получения, которые выглядят как

public function get_slot() {
    return $this->slot;
}

или использовать магическую функцию __get(), чтобы создать общий метод получения, который выглядит как

public function __get($name) {
    return $this->$name;
}

Более подробную информацию можно получитьнайдено в документации на http://php.net/manual/en/language.oop5.visibility.php

0 голосов
/ 16 января 2012

Этот ответ предназначен для сценария попытки обойти наложенное ограничение личных данных, например, если вы случайно работаете с библиотекой, к которой у вас нет доступа для изменения уровня привилегий члена класса, тогда это работа вокруг. Предполагая, что объект является сериализуемым / не сериализуемым, рассмотрим:

<?php
class SourceProtected {
    private $foo = 'one';
    protected $baz = 'two';
    public $bar = 'three';
}   

class SourceUnprotected {
    public $foo = 'blah';       
    public $baz = 'two';
    public $bar = 'three';
}


$protected = new SourceProtected();
$unprotected = new SourceUnprotected();
var_dump(serialize($protected), serialize($unprotected));    

Вывод выглядит примерно так:

string(110) "O:15:"SourceProtected":3:{s:20:"?SourceProtected?foo";s:3:"one";s:6:"?*?baz";s:3:"two";s:3:"bar";s:5:"three";}"
string(92) "O:17:"SourceUnprotected":3:{s:3:"foo";s:4:"blah";s:3:"baz";s:3:"two";s:3:"bar";s:5:"three";}"

Таким образом, одним из решений является создание дублирующего класса, который изменяет уровень привилегий для переменных на все public. Затем сериализуйте рабочий объект, преобразуйте *** сериализованный класс в ваши версии, затем просто десериализуйте строку, и вы получите рабочий объект вашего типа класса с неограниченным доступом.

Очевидно, что в методе конвертации вам нужно будет немного поработать. Вам нужно либо создать обобщенный синтаксический анализатор, который может обработать любой случай, либо вы можете написать хакерскую работу только для вашей конкретной серии сценариев использования str_replaces.

0 голосов
/ 16 января 2012

К частным свойствам можно получить доступ изнутри самого объекта.Для доступа попробуйте использовать $this->propertyName

0 голосов
/ 16 января 2012
0 голосов
/ 16 января 2012

Вам понадобится метод доступа к каждому объекту для доступа к значениям.Поскольку они являются частными, к ним можно получить доступ только внутри каждого из классов, которым они принадлежат.

0 голосов
/ 16 января 2012

Эти предметы доступны только самому объекту. Вам придется изменить код для этого класса и предоставить метод доступа или изменить их область действия.

http://www.php.net/manual/en/language.oop5.properties.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...