萧十郎
我认为@Petah是最好的方法,但是那样您会丢失数组或对象的属性。因此,我添加了一个以递归方式执行的功能:function json_encode_private($object) { function extract_props($object) { $public = []; $reflection = new ReflectionClass(get_class($object)); foreach ($reflection->getProperties() as $property) { $property->setAccessible(true); $value = $property->getValue($object); $name = $property->getName(); if(is_array($value)) { $public[$name] = []; foreach ($value as $item) { if (is_object($item)) { $itemArray = extract_props($item); $public[$name][] = $itemArray; } else { $public[$name][] = $item; } } } else if(is_object($value)) { $public[$name] = extract_props($value); } else $public[$name] = $value; } return $public; } return json_encode(extract_props($object));}编辑:在数组循环内添加了is_object()检查,以避免在数组元素不是对象(如字符串或数字)时在下一个extract_props()调用中出现get_class()异常。